더북(TheBook)

문제 풀이

문자를 일정한 거리만큼 미는 문제입니다. 쉽게 말하면 문자를 숫자(아스키 코드)로 전환하여, 주어진 숫자만큼 더한 뒤 다시 문자로 바꾸는 작업을 하는 문제입니다.

문자를 숫자로 바꾸려면 ord(), 숫자를 문자로 바꾸려면 chr() 함수를 사용하면 됩니다. 하지만 문자를 숫자로 바꾸고 주어진 숫자만큼 더하다 보면 숫자가 알파벳의 범위를 벗어날 수 있습니다. 'A' 문자는 숫자 65로 바꿀 수 있는데, 여기서 100을 더하면 165가 되고, 해당 숫자를 다시 문자열로 바꾸면 '¥' 글자가 됩니다. 만약 결과가 알파벳의 범위를 벗어나면 해당 알파벳의 처음인 a 또는 A로 돌아가야 합니다(소문자 z → 소문자 a, 대문자 Z → 대문자 A).

결국 문자로 바꿀 숫자가 알파벳의 범위를 벗어나는지 판단하고 넘은 만큼 추가 보정을 해야 하므로, 그에 맞는 방법을 찾아야 합니다. for 문으로 직접 숫자를 더하면서 범위를 벗어났을 때 다시 돌아가는 방법도 있고, 미리 마지막 알파벳에서 현재 알파벳만큼 숫자를 빼고 남은 숫자만큼 n을 미리 줄인 후 더하는 방법도 있지만 조금 더 쉬운 방법이 있습니다.

알파벳은 총 26자이므로 어떤 큰 숫자를 더해 알파벳 순서를 계속 반복하더라도 26자 안에서 반복되니 원래 글자를 첫 번째 알파벳에서 얼마나 떨어져 있는지 계산한 뒤 숫자를 더하고, 26으로 나눈 나머지를 취하면 어떤 알파벳이 만들어지는지 쉽게 알 수 있습니다.

 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.