반응형
https://www.acmicpc.net/problem/5622
5622번: 다이얼
첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
www.acmicpc.net
내 코드(틀린 코드)
import sys
input = sys.stdin.readline
num =0
string = input().strip()
for i in string:
print((ord(i)-65)//3 +3)
print(num)
옳은 풀이
import sys
input = sys.stdin.readline
ans =0
dial = ['ABC', 'DEF','GHI', 'JKL', 'MNO','PQRS', 'TUV', 'WXYZ']
word = input().strip()
for alphabet in dial:
for spelling in alphabet:
for i in word:
if i == spelling:
ans += dial.index(alphabet) + 3
print(ans)
list.index()
틀린 코드. 자꾸 이 코드로 틀려서 대체 왜 테스트케이스로 나와있는 것들은 맞는데 자꾸 틀리지 싶었다.
나는 ord(i)로 바꿔서 3개 단위로 끊었는데 알고보니 'WXYZ' 같이 4개씩 묶여져 있는 것도 있었다.
그래서 조건을 바꾸어 다시 풀었다.
그리고 index라는 함수도 새롭게 알게 되었다. index는 해당 문자열이 리스트 안에 몇 번째로 있는지 알려주는 함수이다.
dial = ['ABC', 'DEF','GHI', 'JKL', 'MNO','PQRS', 'TUV', 'WXYZ']
이렇게 생긴 리스트가 있다고 할 때, 단순히 ABC만 찾을 수 있는 것이 아니라, A만 찾을 수도 있다.
그래서 찾을 때는 dial을 한 개씩 쪼개고, 한 개를 스펠링 단위로 쪼갠다.
그러고나서 찾고자하는 문자를 돌려보면서 만약 스펠링과 문자 1개가 같으면 index로 위치를 찾는다.
1이 +2 이고, 가장 첫 번째도 1 +2 이니까, 기본으로 +3을 해주어 계산한다.
반응형
'코딩테스트 대비 > 백준(BOJ)' 카테고리의 다른 글
| [Python][백준/BOJ] 4673번 : 셀프 넘버 (0) | 2023.06.25 |
|---|---|
| [Python][백준/BOJ] 1010번 : 다리 놓기 (0) | 2023.06.23 |
| [Python][백준/BOJ] 2875번 : 대회 or 인턴 (0) | 2023.06.23 |
| [Python][백준/BOJ] 1094번 : 막대기 (0) | 2023.06.23 |
| [Python][백준/BOJ] 1049번 : 기타줄 (0) | 2023.06.23 |