투포인터

문제 설명고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고양이의 언어로, 고양이의 언어를 사람의 언어로 바꾸어 주는 희대의 발명품이 될 것이다.현재 고양이말 번역기의 베타버전이 나왔다. 그러나 이 베타버전은 완전 엉망진창이다. 베타버전의 번역기는 문자열을 주면 그 중에서 최대 N개의 종류의 알파벳을 가진 연속된 문자열밖에 인식하지 못한다. 굉장히 별로지만 그나마 이게 최선이라고 사람들은 생각했다. 그리고 문자열이 주어졌을 때 이 번역기가 인식할 수 있는 최대 문자열의 길이는 얼마인지가 궁금해졌다.고양이와 소통할 수 있도록 우리도 함께 노력해보자.https://www.ac..
문제 설명N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.수의 위치가 다르면 값이 같아도 다른 수이다.https://www.acmicpc.net/problem/1253      제한 사항      풀이문제를 요약하면, N개의 수가 주어졌을 때, i번째 수를 i번째 수가 아닌 다른 두 수의 합으로 표현할 수 있는 수의 개수를 구하는 것이다. 해당 문제는 i번째 수를 목표로 설정하고 투 포인터를 이용하여 해결할 수 있다.보통의 경우, 정렬을 진행한 후 i번째 수를 구한다고 생각하면 i보다 작은 수의 합으로 구할 수 있기 때문에 [0, i-1]의 범위만 검사하면 된다.하지만, 해당 ..
문제 설명KOI 중학교에는 N개의 학급이 있으며, 각 학급의 학생 수는 모두 M명으로 구성된다. 이 중학교에서는 체육대회에 새로운 종목의 경기를 추가하였다. 이 경기에 대해 모든 학생들은 저마다의 능력을 나타내는 능력치를 가지고 있으며, 이 능력치는 모든 학생이 서로 다르다.이 경기는 한반에서 한 명의 대표선수를 선발하여 치른다. 경기의 형평성을 위하여, 각각의 반에서 대표로 선발된 모든 학생들의 능력치 중 최댓값과 최솟값의 차이가 최소가 되도록 선수를 선발하려고 한다. 예를 들어, N=3, M=4인 경우 학생들의 능력치가 1반=[12, 16, 67, 43],  2반=[7, 17, 68, 48], 3반=[14, 15, 77, 54]로 주어질 때, 각 학급으로부터 능력치 16, 17, 15를 가진 학생을 ..
문제 설명언니! 똑...똑똑...똑똑! 같이 눈사람 만들래~? ♪언니 엘자와 동생 안나에게는 N개의 눈덩이가 있다. 각 눈덩이 i (1 ≤ i ≤ N)의 지름은 Hi 이다. 하나의 눈사람은 두 개의 눈덩이로 구성되며, 눈덩이 하나를 아래에 두고 그 눈덩이보다 크지 않은 다른 눈덩이를 쌓아올리는 방식으로 만들 수 있다. 이때, 눈사람의 키는 두 눈덩이 지름의 합과 같다.엘자와 안나는 눈덩이 N개 중 서로 다른 4개를 골라서 눈사람을 각각 1개씩, 총 2개를 만들려고 한다. 두 자매는 두 눈사람의 키의 차이가 작을수록 두 눈사람의 사이가 좋을 것이라고 믿는다. 우리는 엘자와 안나가 가장 사이좋은 두 눈사람을 만들기 위해서 도와주려고 한다.주어진 N개의 눈덩이를 이용하여 만들 수 있는 두 눈사람의 키 차이 중..
문제 설명길이가 N인 수열이 주어질 때, 수열에서 연속한 1개 이상의 수를 뽑았을 때 같은 수가 여러 번 등장하지 않는 경우의 수를 구하는 프로그램을 작성하여라.https://www.acmicpc.net/problem/13144      제한 사항      풀이문제를 요약하면, N개의 수가 주어지면 연속한 수를 고를 때 유일한 수만 포함되도록 고르는 경우의 수를 구해야 한다. 해당 문제는 투포인터를 이용하면 간단하게 해결할 수 있다.시작점을 정하고 오른쪽으로 진행하면서 같은 수가 나오기 전까지 끝점을 옮긴다.만약, 같은 수가 나온다면 (끝점 - 시작점) 개만큼의 경우의 수를 추가할 수 있다.이후, 시작점을 오른쪽으로 한 칸 이동시킨다.그리고 위 과정을 계속 반복한다.끝점은 계속 유지하기 때문에 시작점을 ..