목록투포인터 (3)
라떼는말이야
문제 N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다. N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라. 수의 위치가 다르면 값이 같아도 다른 수이다. 입력 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) 출력 좋은 수의 개수를 첫 번째 줄에 출력한다. 예제 힌트 3,4,5,6,7,8,9,10은 좋다. 나의 풀이 문제 접근은 어렵지 않았다. 투 포인터의 전형적인 유형인 것 같다. 그러나 디테일한 부분을 놓쳐 여러 시도 끝에 성공한 문제이다. 다음 4가지 상황을 주의하자 입력 받은 숫자들을 정렬했는가 숫자..
문제 선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다. 함수 R은 배열에 있는 수의 순서를 뒤집는 함수이고, D는 첫 번째 수를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다. 함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "AB"는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다. 예를 들어, "RDD"는 배열을 뒤집은 다음 처음 두 수를 버리는 함수이다. 배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다. 각 테스트 케이..
투 포인터(two pointer) 배열에서 두 개의 포인터를 이용해 양 끝에서 탐색해 나가며 답을 찾는 방식 Q. 주어진 배열에서 합이 27인 경우를 찾아라 최초에 맨 끝인 1과 28을 가리킨다. 찾아야 하는 값(27)이 29보다 작으므로 오른쪽 포인터를 하나 감소시킨다. (1, 25 가리킴) 찾아야 하는 값(27)이 26보다 크므로 왼쪽 포인터를 하나 증가시킨다. (3, 25) 찾아야 하는 값(27)이 28보다 작으므로 오른쪽 포인터를 하나 감소시킨다. (3, 22) 찾아야 하는 값(27)이 25보다 크므로 왼쪽 포인터를 하나 증가시킨다. (5, 22) 찾아야 하는 값(27)이 두 포인터가 가리키는 값의 합과 같으므로 5와 22를 return 한다. 또 다른 순서쌍이 존재할 수 있으니 계속 진행한다. ..