[프로그래머스] 시저 암호
아스키를 잘 다룬다면 쉬운 문제겠지만 잘 못다룬다면 어려운 문제일 수 있겠다. 문자열과 정수를 입력받아 정수 만큼 다음 문자로 밀어주는 (예를 들면 A가 2만큼 이동하면 C) 카이사르 암호 문제이다.
이 문제에서 잘 생각해야 하는 부분은 알파벳에서 소문자 대문자를 포함하지 않는다면 A 부터 Z까지 모두 26자 이다. 여기서 Z에서 정수 1을 받게 되면 A로 다시 돌아와야 한다. 그렇기 때문에 입력 받은 n을 밀어낼 자리 수 계산을 위해 n = n % 26
을 이용. 26(Z)이 넘어가게 되면 나머지 값 1
, 즉 A 부터 다시 출력 할 수 있게 한다.
문자열 s의 길이 만큼 반복하고, char 변수에 문자열에서 문자 하나를 받아 소문자, 대문자를 판별한다. 사용한 라이브러리 함수는 isLowerCase()
, isUpperCase()
이다. boolean 타입이며 각각 소문자면 해당 문자가 소문자, 대문자면 true, false를 내보낸다.
그 후 이동시킬 알파벳 ch에서 ‘A’ 또는 ‘a’를 빼고 밀어줄 n값을 더한 후 전체 알파벳 수(26)
로 나눈 나머지를 구하면 이동할 거리가 완벽하게 계산된다. 그걸 다시 초기값 ‘A’ 또는 ‘a’에 더해주면 ch 문자로부터 n만큼 이동한 알파벳이 나오게 된다. 마지막으로 입력 받았을 때 공백이 포함 된 문자열이 있으므로 공백 (ascii 값 32) 처리로 마무리 한다. ascii를 계산하는 핵심 공식을 잘 알아둬야겠다.
1 | class Solution { |
[프로그래머스] 시저 암호