[프로그래머스] 시저 암호
아스키를 잘 다룬다면 쉬운 문제겠지만 잘 못다룬다면 어려운 문제일 수 있겠다. 문자열과 정수를 입력받아 정수 만큼 다음 문자로 밀어주는 (예를 들면 A가 2만큼 이동하면 C) 카이사르 암호 문제이다.
아스키를 잘 다룬다면 쉬운 문제겠지만 잘 못다룬다면 어려운 문제일 수 있겠다. 문자열과 정수를 입력받아 정수 만큼 다음 문자로 밀어주는 (예를 들면 A가 2만큼 이동하면 C) 카이사르 암호 문제이다.
입력 n이 1일 땐 “수” 출력, n이 2이면 “수박”, 3이면 “수박수” … index 초기값을 1로 초기화 하고 반복문을 통해 i가 증가 할때마다 홀수, 짝수 판별을 한다. 만약 홀수면 “수”, 짝수면 “박”을 answer 에 추가해가면서 n번 반복한다.
문제 자체는 쉬웠지만 자칫 그냥 써버릴 수 있는 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
서울에서 김서방 찾기… 금방 풀었다라고 생각했고 테스트 통과까지 했다.
하지만 정확성 테스트에서 털려버렸고 이유는 질문하기에서 금방 찾을 수 있었다.
직사각형을 만드는데 필요한 4개의 점 중 3개만 주어질 때, 주어지는 3개의 점들은 모두 각 x축 y축에 평행 하도록 하는 좌표만 주므로, 만약 [[1,4],[3,4],[3,10]]
이 주어졌을 때 중복 되는 배열의 원소 수는 소거한다. 그럼 중복 되지 않는 수가 나머지 한 점 이 된다.
그러므로 [1,10]
이 output으로 나와야 한다.
주어진 2차원 배열을 비정방형 행렬로 생각하여 풀어보자.
1 | x좌표 y좌표 |