https://www.acmicpc.net/problem/5622
-- 다이얼 전화기 작동 원리와 동일
-- 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
-- 할머니가 외운 단어가 주어졌을 때, 최소 시간 구하기
이런식으로 풀면 되지 않을까,,
eng_num = {'A': 2, 'B': 2, 'C': 2, 'D': 3, 'E': 3, 'F': 3, 'G': 4, 'H': 4, 'I': 4, 'J': 5, 'K': 5, 'L': 5, 'M': 6, 'N': 6, 'O': 6, 'P': 7, 'Q': 7, 'R': 7, 'S': 7, 'T': 8, 'U': 8, 'V': 8, 'W': 9, 'X': 9, 'Y': 9, 'Z': 9}
사실 이거 만들면서 느꼈다. 이렇게 풀면 안될거 같은디,,
N = len(input())
word = map(char, input().split())
total_time = 0
for _ in range(N):
count = eng_num[word]
total_time += count + 1
print(total_time)
이번 문제 어렵다(?)
호기롭게 에러 여러개 생성하고 틀렸는데, 그 이유는
1-1. intput.split은 문자열을 공백 기준으로 분할하는데, 입력에 공백이 없다.
1-2. map함수에서 int로 받듯이 char로도 받을 수 있지 않을까 싶었는데, char 함수는 존재하지 않는다함.
2. N과 word 변수에서 input을 두 번 받는다.
eng_num = {'A': 2, 'B': 2, 'C': 2, 'D': 3, 'E': 3, 'F': 3, 'G': 4, 'H': 4, 'I': 4, 'J': 5, 'K': 5, 'L': 5, 'M': 6, 'N': 6, 'O': 6, 'P': 7, 'Q': 7, 'R': 7, 'S': 7, 'T': 8, 'U': 8, 'V': 8, 'W': 9, 'X': 9, 'Y': 9, 'Z': 9}
word = input()
N = len(word)
total_time = 0
for _ in range(N):
count = eng_num[word]
total_time += count + 1
print(total_time)
면 또 오류가 난다. 왜!!
word가 문자열 전체를 나타내기 때문임 ㅇㅇ.
하 이번 문제 어렵다22
word[0] -> 문자열 첫 번째 문자 나타냄
word[_] -> _번째 문자를 나타내기 때문에 이게 올바른 표현이라고함
eng_num = {'A': 2, 'B': 2, 'C': 2, 'D': 3, 'E': 3, 'F': 3, 'G': 4, 'H': 4, 'I': 4, 'J': 5, 'K': 5, 'L': 5, 'M': 6, 'N': 6, 'O': 6, 'P': 7, 'Q': 7, 'R': 7, 'S': 7, 'T': 8, 'U': 8, 'V': 8, 'W': 9, 'X': 9, 'Y': 9, 'Z': 9}
word = input()
N = len(word)
total_time = 0
for _ in range(N):
count = eng_num[word[_]]
total_time += count + 1
print(total_time)
그리고 전문가가 알려준 클린 코드
eng_num = {'A': 2, 'B': 2, 'C': 2, 'D': 3, 'E': 3, 'F': 3, 'G': 4, 'H': 4, 'I': 4, 'J': 5, 'K': 5, 'L': 5, 'M': 6, 'N': 6, 'O': 6, 'P': 7, 'Q': 7, 'R': 7, 'S': 7, 'T': 8, 'U': 8, 'V': 8, 'W': 9, 'X': 9, 'Y': 9, 'Z': 9}
word = input()
total_time = 0
for char in word:
count = eng_num[char]
total_time += count + 1
print(total_time)
여기서 'char'의 사용이 이해가 잘 안갔는데, word열을 순회하는 변수라고 함.
때문에 변수 선언해서 굳이 N만큼 반복 지정을 할 필요가 없었던 것이다~
풀다가(=딕셔너리 노가다 하다가) 생각났는데 list로 값을 저장해 array[i] 값으로 계산하는게 빠를 것 같다는 생각이 들었다.
num_list = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
로 리스트 설정.
1. 입력받는 값의 array[i] 위치를 받음
2. array[i]에서 i + 3 (array[0] 을 감안)
예를 들어 A값을 입력 받으면 num_list[0]임을 확인, [0]에서 0값만 빼낸 후 + 2를 하면 최단 기간 구함.
num_list = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
word = input()
total_time = 0
for char in word:
for i in range(len(num_list)):
if char in num_list[i]:
total_time += i + 3
break
print(total_time)
인덱스를 받아서 어찌저찌 풀었다.
아 어려워,,, 어려워,,, 어려워,,,