다이얼 전화기를 써서 번호를 입력할때 얼마만큼의 시간이 소요되는지를 계산하는 문제이다.
2번 ABC부터 9번 WXYZ에 알파벳이 있으며, 똑똑하신 상근이 할머니는 숫자대신 알파벳을 활용해서 번호를
입력하신다고 한다 .....ㅡㅡ;
특이한 점은 1번과 0번에는 알파벳이 없으며(0번에 OPERATION이라고 있긴한데..), 입력값은 알파벳 대문자로만
이루어진 단어를 입력한다는 조건이 있다. (즉, 1번과 0번은 출력값에 제외를 하라는듯)
한가지 유의해야할 점은 9번과 더불어 7번이 PQRS로 4자리 알파벳으로 되어있다.
처음 문제를 보고 switch문으로 간단하게 빨리 풀려다가 생각해보니 파이썬에는 switch문이 없다.
그래서 가장 간단한 방식인 조건문으로 문제를 풀어봤다.
풀이:
word = input() #단어 입력부
sum = 0 #sum은 초기값 0 선언
for i in range(len(word)): #len()함수를 이용해서 단어의 길이만큼 반복문 돌린다.
a = word[i]
#if a == '1': time = 2 만약 1번과 0번도 입력값에 들어가는 조건이었다면 넣어줌
#elif a == '0': time = 11
if 65<= ord(a) <= 67: #문자를 아스키코드값으로 반환하는 ord()함수와, A의 아스키코드값 65를 활용
time = 3 #65~67은 A~C의 범위이다. 1번이 2초이므로, 2번은 3초 설정
elif 68<= ord(a) <= 70:
time = 4
elif 71<= ord(a) <= 73:
time = 5
elif 74<= ord(a) <= 76:
time = 6
elif 77<= ord(a) <= 79:
time = 7
elif 80<= ord(a) <= 83: #7번은 알파벳 4개이므로 범위를 4로 설정
time = 8
elif 83<= ord(a) <= 86:
time = 9
elif 87<= ord(a) <= 90: #9번도 알파벳 4개이므로 범위를 4로 설정
time = 10
sum += time #각 알파벳에 해당되는 시간들을 sum에 합산 해준다.
print(sum) #시간합 출력
그냥 단순하게 문제를 풀어봤지만... 아마 출제 의도가 이렇지는 않을 것이다.
만약 알파벳이 동일하게 번호당 3개씩 증가했다면(중간에 7이 없다면),time = (아스키코드값 -65)//3+3 이런 방식으로 쉽게
풀수도 있었을 수도 있다.
다른풀이:
word = input() #단어입력
number =['1','ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ', '0']
#'1'과'0'은 사실 원래조건에서 없어도 된다.// 번호 순서에 맞게 알파벳을 리스트에 저장한다.
time = 0
for i in range(len(word)): #상위 반복문은 입력된 단어의 길이만큼 행해진다.
for j in range(len(number)): #하위 반복문은 각 문자에 맞는 리스트 인덱스를 찾는데 쓰인다.
if word[i] in number[j]: # in연산자를 통해 i번째 문자열이 리스트[j]에 있는지 확인
time += number.index(number[j])+2 #list.index('내용') 함수를 써서 해당 인덱스 반환하고, 이를 모두 time에 합산
print(time)
리스트에 미리 해당 알파벳들을 저장하고, 입력단어의 각 스펠링에 맞는 리스트 인덱스를 반환한다.
그것을 계산해줘서 시간을 구해준다.
문제를 처음 보자마자 저런 방식으로 바로 구상이 될 정도라면
아마 당신은 파이썬에 매우 익숙한 사람일 것이다.
'코딩' 카테고리의 다른 글
[React] map 함수를 익혀보자 (0) | 2022.11.23 |
---|---|
백준 1712번 손익분기점 파이썬 (0) | 2022.10.17 |
백준 2908번 상수 파이썬 (0) | 2022.10.14 |
백준 2675번 문자열 반복 파이썬 (0) | 2022.10.14 |
백준 4673번 셀프넘버 파이썬 (0) | 2022.10.12 |