[프로그래머스] 시저 암호
아스키를 잘 다룬다면 쉬운 문제겠지만 잘 못다룬다면 어려운 문제일 수 있겠다. 문자열과 정수를 입력받아 정수 만큼 다음 문자로 밀어주는 (예를 들면 A가 2만큼 이동하면 C) 카이사르 암호 문제이다.
아스키를 잘 다룬다면 쉬운 문제겠지만 잘 못다룬다면 어려운 문제일 수 있겠다. 문자열과 정수를 입력받아 정수 만큼 다음 문자로 밀어주는 (예를 들면 A가 2만큼 이동하면 C) 카이사르 암호 문제이다.
입력 n이 1일 땐 “수” 출력, n이 2이면 “수박”, 3이면 “수박수” … index 초기값을 1로 초기화 하고 반복문을 통해 i가 증가 할때마다 홀수, 짝수 판별을 한다. 만약 홀수면 “수”, 짝수면 “박”을 answer 에 추가해가면서 n번 반복한다.
학부생 때 배웠던 스택
자료구조 이론을 토대로 스택 배열 생성, push
, pop
연산 등을 구현해보는 문제였다.
문제 자체는 쉬웠지만 자칫 그냥 써버릴 수 있는 int 타입이 입력 변수 범위가 제한조건에 걸려 테스트케이스에서 실패를 했었던 문제다.
문자열 다루기 기본 문제라는 문제 이름으로 쉬운 문제라고 생각하고 풀었다. 아스키코드 상으로 알파벳 소문자 또는 대문자가 문자열 안에 존재하면 answer 상태를 false로 바꿔주고 리턴까지 시켰다. 하지만 주어진 테스트 케이스를 통과하였지만 자꾸 테스트 5,6번에서 막혔고 이유가 뭔지 골똘히 생각하던 중에 그 이유를 찾을 수 있었다.
문자열의 길이는(s는) 1~5이고, s 맨 앞에는 부호(+,-)
가 올 수 있다고 한다.
부호에 따른 처리가 필요한 것인지 궁금했지만 일단 매개변수로 받은 문자열 s를 정수로 casting 해보았다.
배열 array
를 i번째 부터 j번째 까지 자르고 정렬했을 때, k번째에 있는 수를 구한다.
commands
배열의 각 행, 즉 i,j,k
를 잘 뽑아내고 정렬 후 k번째 수를 answer
배열에 넣기만 하면 된다.
이중 for문을 잘 이해하라!
num이 짝수면 Even 홀수면 Odd
서울에서 김서방 찾기… 금방 풀었다라고 생각했고 테스트 통과까지 했다.
하지만 정확성 테스트에서 털려버렸고 이유는 질문하기에서 금방 찾을 수 있었다.