본문 바로가기

Python(알고리즘,문제풀이)/BOJ(Bronze II)

백준 / 1718번 / 암호 / Python / 구현,문자열

728x90
# 1718번 암호(BronzeII)
line = input()
key = input()
dic = {chr(i+96) : i for i in range(1,27)}
cnt = 0
ans = []

for i in line:
    if i == ' ':
        ans.append(' ')
        if cnt == len(key)-1:
            cnt = 0
        else:
            cnt += 1
        continue

    if dic[i] - dic[key[cnt]] > 0:
        for k,v in dic.items():
            if v == dic[i] - dic[key[cnt]]:
                ans.append(k)
                break
        if cnt == len(key)-1:
            cnt = 0
        else:
            cnt += 1
    else:
        for k,v in dic.items():
            if v == dic[i] - dic[key[cnt]] + 26:
                ans.append(k)
                break
        if cnt == len(key)-1:
            cnt = 0
        else:
            cnt += 1
            
print(''.join(ans))

한땀 한땀 코드를 짜가면서 풀어냈다..!

처음부터 끝까지 내가 디버깅 하면서 

풀어내서 아주 뿌듯하고 비슷한 문제는 다시 틀리지 않을 것 같다

 

정말 운이 좋았던건

처음 제출할 때 

예제는 통과해서 우선 제출해봤다

근데 런타임 에러(Index Error)가 발생

 

그래서 낙심하고

line = 'why wrong'

key = 'nice'

를 입력해봤는데 이 때 Index Error가 발생했다❗

 

덕분에 line에 공백이 들어올 때도

cnt의 길이를 체크해서 key의 인덱스 범위에 있는지 확인해야한다는 것을 알았다

 

그냥 cnt +=1 을 하고 넘어가는 것이 아니라

cnt가 문자열 인덱스의 끝과 같다면 다시 0으로 리셋시키고

아니라면 1을 더해주어야 한다

 

예제에서는

공백이 나오는 위치가 

key(=love)의 길이보다 1칸 뒤라서

운좋게 통과된것 같다

if i == ' ':
        ans.append(' ')
        cnt += 1
        continue

			.
            .
            .
            ▼

if i == ' ':
        ans.append(' ')
        if cnt == len(key)-1:
            cnt = 0
        else:
            cnt += 1
        continue

 

728x90