2022년 11월 8일에 작성됨
https://www.acmicpc.net/problem/5622
5622번: 다이얼
첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
www.acmicpc.net
문제 분석
A,B,C는 3초, D,E,F는 4초 ... W,X,Y,Z는 10초가 걸린다.
단어를 입력 받고, 그 알파벳에 해당하는 시간을 누적하여 합을 구해준다.
소스 코드-1 (❌)
word = input()
a = 0
for i in word:
if i == ('A' or 'B' or 'C'):
a += 3
elif i == ('D' or 'E' or 'F'):
a += 4
elif i == ('G' or 'H' or 'I'):
a += 5
elif i == ('J' or 'K' or 'L'):
a += 6
elif i == ('M' or 'N' or 'O'):
a += 7
elif i == ('P' or 'Q' or 'R' or 'S'):
a += 8
elif i == ('T' or 'U' or 'V'):
a += 9
elif i == ('W' or 'X' or 'Y' or 'Z'):
a += 10
print(a)
파이썬이라면 이런 구성으로 해도 가능하지 않을까 하고 시도해봤지만..
코드가 돌아가지 않았다.
소스 코드-2 (⭕)
word = input()
a = 0
for i in word: # word의 각 글자를 i에 대입
if i == 'A' or i == 'B' or i == 'C':
a += 3
elif i == 'D' or i == 'E' or i == 'F':
a += 4
elif i == 'G' or i == 'H' or i == 'I':
a += 5
elif i == 'J' or i == 'K' or i == 'L':
a += 6
elif i == 'M' or i == 'N' or i == 'O':
a += 7
elif i == 'P' or i == 'Q' or i == 'R' or i == 'S':
a += 8
elif i == 'T' or i == 'U' or i == 'V':
a += 9
elif i == 'W' or i == 'X' or i == 'Y' or i == 'Z':
a += 10
print(a)
위 1번 코드에서 틀린 형식을 바르게 고친 코드이다.
단어 word를 입력 받고, word의 한 글자씩 비교해보며 동일한 알파벳이 있으면 변수 a에 누적합을 구해주고 출력하는 방식이다.
소스 코드-3 (⭕)
# 딕셔너리에 키값과 밸류값 각각 입력함
dic = {'A': 3, 'B': 3, 'C': 3, 'D': 4, 'E': 4, 'F': 4, 'G': 5, 'H': 5, 'I': 5, 'J': 6, 'K': 6, 'L': 6, 'M': 7,
'N': 7, 'O': 7, 'P': 8, 'Q': 8, 'R': 8, 'S': 8, 'T': 9, 'U': 9, 'V': 9, 'W': 10, 'X': 10, 'Y': 10, 'Z': 10}
word = input() # 단어 입력받음
a = 0 # 시간 담을 변수 a를 0으로 초기화
for i in range(0, len(word)): # i는 0부터 단어 길이-1 까지 반복
a += dic[word[i]] # dic[키값]=밸류값의 누적합 구함
print(a) # 누적 시간 출력
딕셔너리를 이용하여 키값에는 알파벳을, 밸류값에는 그에 맞는 시간을 입력해준다.
딕셔너리에서 dic[키값]=밸류값 이므로 for문을 이용하여 word의 한 글자씩 키값으로 넣어주면 a에는 밸류값 즉, 시간이 더해진다.
end
i를 반복해서 써주기에는 비효율적인 것 같아서 다른 시도를 해봤지만 실패했다!
딕셔너리는 개념은 배웠지만 코딩 문제를 풀면서 적용해본 적은 없는 것 같아서 되게 참신했다.. 보통 리스트만 많이 썼는데 튜플이랑 딕셔너리 등도 많이 활용해보고 싶다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[Python]백준_2810 : 컵홀더 (0) | 2023.10.31 |
---|---|
[Python]백준_10825 : 국영수 (0) | 2023.10.31 |
[Python]백준_2628 : 종이자르기 (2) | 2023.10.30 |
[Python]백준_2581 : 소수 (2) | 2023.10.29 |
[Python]백준_1789 : 수들의 합 (2) | 2023.10.29 |