📝 문제
> 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.
전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.
숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.
설명 덧붙이자면, 저기 전화기 숫자 밑에 문자가 있다. 입력받은 문자랑 숫자를 매칭 시켜서 전화걸건데, 다 합해서 총 몇 번 돌려야하는지 뭐 그런 문제다.
- UNUCIC 로 설명해보자면!
U는 8 밑에 있는 문자다. 숫자 1에서 총 2초가 걸리니까 8에서는 9초가 걸린다.
N은 6 밑에 있는 문자다. 얘는 7초가 걸린다.
이런식으로 계산하다보면, 9 + 7 + 9 + 3 + 5 + 3 = 36 이 나온다. (예제 출력 2 답과 일치)
https://www.acmicpc.net/problem/5622
🎨 풀이
💡 성공 코드
import sys
s = str(sys.stdin.readline())
dial = ['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
sum = 0
for char in s:
for i in range(len(dial)):
if char in dial[i] :
sum = sum + ( i + 3 )
print(sum)
> 핵심 : if ~ in 사용.
1. s 문자열 입력받는다.
2. dial 리스트에 'ABC' , ... 등으로 구분해서 넣어준다.
3. 문자열 글자 하나씩 dial[i] 안에 있는 지 보고, 안에 있다면 sum에 i + 3 만큼 더해준다.
- i + 3만큼 더해주는 이유는, 1일 때 2초라고 해서 그 간격을 맞춰야하니까 원래 숫자 + 1 을 해줘야하는 거고,
그리고 리스트 첫 문자열인 ABC 가 0이 아니라 숫자 2 밑에 있기 때문에 +2 를 해주는 것이다. 그래서 총 합하면 + 3 이다.
- 간단 요약해보자면, 그냥 문자 그 안에 있는지 for문 돌면서 확인하고 안에 있으면 위의 공식에 맞춰서 sum = sum + i +3을 해주는 것이다.
4. sum 값을 출력해준다.
끝~
⭐ 느낀점
> 말이 좀 횡설수설이였던 것 같긴 한데, 그래도 뭐 잘했다. 고생했다. 못 풀 줄 알았는데 풀어서 기분이 아주 좋다. ㅎㅎ
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 1316번 - 그룹 단어 체커 (파이썬) (0) | 2022.06.21 |
---|---|
[백준] 2941번 - 크로아티아 알파벳 (파이썬) (0) | 2022.06.20 |
[백준] 2908번 - 상수 (파이썬) (0) | 2022.06.18 |
[백준] 1152번 - 단어의 개수 (파이썬) (0) | 2022.06.17 |
[백준] 2675번 - 문자열 반복 (파이썬) (0) | 2022.06.16 |