더북(TheBook)

1-B. 알파벳인 경우 n만큼 밀어 이어 붙이기

이제 알파벳을 n만큼 밀어 주어야 합니다. 대·소문자를 무시하고 생각해보면 알파벳은 a부터 z까지 있으며 a를 0, b를 1이라고 했을 때 z는 25가 됩니다. 그리고 z에서 1을 밀면 26이 되는 것이 아니라 0으로 되돌아와야 하죠. 이는 알파벳이 대문자이든 소문자이든 상관없이 공통으로 적용되는 사실입니다. 즉, 알파벳을 0~25로 변환할 수 있으면 n만큼 미는 것은 같은 로직을 적용시킬 수 있습니다.

알파벳을 0~25로 변환하는 것은 숫자를 표현하는 문자를 정수로 변환하는 것과 같습니다. 대문자는 ‘A’, 소문자는 ‘a’부터 시작하므로 이를 offset 변수에 저장하고, 이 변수를 사용하여 알파벳의 변환된 값 position을 다음과 같이 계산할 수 있습니다.

int offset = Character.isUpperCase(c) ? 'A' : 'a';
int position = c - offset;

이제 이 positionn만큼 밀어 주면 됩니다. 이때 기억해야 할 점은 마지막 위치에 도달하면 0부터 다시 시작해야 한다는 것입니다. 알파벳은 a부터 z까지 있으므로 가능한 position은 0부터 (‘Z’ – ‘A’)까지입니다. 이 범위를 벗어날 때 0부터 시작되게 하는 것은 나머지 연산자로 다음과 같이 간단하게 구현할 수 있습니다.

position = (position + n) % ('Z' - 'A' + 1);

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