과일 탕후루 
https://www.acmicpc.net/problem/30804
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 2 초 | 1024 MB | 13648 | 4768 | 3826 | 33.976% |
문제
은하는 긴 막대에 N개의 과일이 꽂혀있는 과일 탕후루를 만들었습니다.
과일의 각 종류에는 1부터 9까지의 번호가 붙어있고, 앞쪽부터 차례로
번 과일이 꽂혀있습니다.
과일 탕후루를 다 만든 은하가 주문을 다시 확인해보니 과일을 두 종류 이하로 사용해 달라는 요청이 있었습니다.
탕후루를 다시 만들 시간이 없었던 은하는, 막대의 앞쪽과 뒤쪽에서 몇 개의 과일을 빼서 두 종류 이하의 과일만 남기기로 했습니다.
앞에서 a개, 뒤에서 b개의 과일을 빼면
번 과일, 총 N – (a + b)개가 꽂혀있는 탕후루가 됩니다. ![]()
이렇게 만들 수 있는 과일을 두 종류 이하로 사용한 탕후루 중에서, 과일의 개수가 가장 많은 탕후루의 과일 개수를 구하세요.
입력
첫 줄에 과일의 개수 N이 주어집니다. ![]()
둘째 줄에 탕후루에 꽂힌 과일을 의미하는 N개의 정수
이 공백으로 구분되어 주어집니다. ![]()
출력
문제의 방법대로 만들 수 있는 과일을 두 종류 이하로 사용한 탕후루 중에서, 과일의 개수가 가장 많은 탕후루의 과일 개수를 첫째 줄에 출력하세요.
예제 입력 1
5 5 1 1 2 1
예제 출력 1
4
과일을 앞에서 1개, 뒤에서 0개의 과일을 빼면 남은 과일은 1, 1, 2, 1번 과일이 꽂혀있는 탕후루가 됩니다.
과일의 개수는 4개입니다.
예제 입력 2
3 1 1 1
예제 출력 2
3
탕후루가 이미 두 종류 이하의 과일로만 이루어져 있습니다.
예제 입력 3
9 1 2 3 4 5 6 7 8 9
예제 출력 3
2
과일을 앞에서 3개, 뒤에서 4개의 과일을 빼면 남은 과일은 4, 5번 과일이 꽂혀있는 탕후루가 됩니다.
과일의 개수는 2개입니다.
출처
Contest > solved.ac > solved.ac Grand Arena #3 > Division 2 C번
Contest > solved.ac > solved.ac Grand Arena #3 > Division 1 A번
알고리즘 분류
통과된 코드
map 자료구조, 두 포인터 알고리즘을 이용하여 문제를 해결
#include <iostream>
#include <map>
using namespace std;
int N;
int Arr[200000];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N;
for (int i = 0; i < N; i++)
cin >> Arr[i];
map<int, int> fruitCount;
int left = 0, right = 0, maxLen = 0;
while (right < N)
{
// 오른쪽 과일 추가
fruitCount[Arr[right]]++;
while (fruitCount.size() > 2)
{
// 과일 종류가 2개 초과하면 줄이기
fruitCount[Arr[left]]--;
if (fruitCount[Arr[left]] == 0)
fruitCount.erase(Arr[left]);
left++;
}
// 최대 길이 갱신
maxLen = max(maxLen, right - left + 1);
right++;
}
cout << maxLen << "\n";
return 0;
}
Arr[] 범위를 20,000으로 오타를 내고 제출하여 계속 오답을 받았다. (올바른 범위는 200,000)


![백준 1339번 (단어 수학, C++, Greedy) [BAEKJOON]](https://lycos7560.com/wp-content/uploads/boj-og-1.png)
![Programmers 17677 [1차] 뉴스 클러스터링 [2018 KAKAO BLIND RECRUITMENT]](https://lycos7560.com/wp-content/uploads/2023/03/programmers.jpg)
![백준 1003번 (피보나치 함수, C++, DP) [BAEKJOON]](https://lycos7560.com/wp-content/uploads/boj-og.png)