[BOJ] 과일 탕후루 30804번 C++

2025. 3. 12. 14:49· Algorithm

 

 

문제

은하는 긴 막대에 N개의 과일이 꽂혀있는 과일 탕후루를 만들었습니다. 과일의 각 종류에는 1부터 9까지의 번호가 붙어있고, 앞쪽부터 차례로 S1,S2,⋯,SN번 과일이 꽂혀있습니다. 과일 탕후루를 다 만든 은하가 주문을 다시 확인해보니 과일을 두 종류 이하로 사용해달라는 요청이 있었습니다.

탕후루를 다시 만들 시간이 없었던 은하는, 막대의 앞쪽과 뒤쪽에서 몇 개의 과일을 빼서 두 종류 이하의 과일만 남기기로 했습니다. 앞에서 a개, 뒤에서 b개의 과일을 빼면 Sa+1,Sa+2,⋯,SN−b−1,SN−b번 과일, 총 N−(a+b)개가 꽂혀있는 탕후루가 됩니다. (0≤a,b; a+b<N)

이렇게 만들 수 있는 과일을 두 종류 이하로 사용한 탕후루 중에서, 과일의 개수가 가장 많은 탕후루의 과일 개수를 구하세요.

입력

첫 줄에 과일의 개수 N이 주어집니다. (1≤N≤200000)

둘째 줄에 탕후루에 꽂힌 과일을 의미하는 N개의 정수 S1,⋯,SN이 공백으로 구분되어 주어집니다. (1≤Si≤9)

 

출력

문제의 방법대로 만들 수 있는 과일을 두 종류 이하로 사용한 탕후루 중에서, 과일의 개수가 가장 많은 탕후루의 과일 개수를 첫째 줄에 출력하세요.

 

접근 방식

 

앞과 뒤에서 과일을 빼면 되지만 이때, 앞에서 뺄지 뒤에서 뺄지에 따라 최댓값이 달라질 수 있다

따라서, 슬라이딩 윈도우 기법을 이용하면 O(N) 만에 모든 배열을 훑으면서 최댒 부분 길이를 구할 수 있다

 

이때, 나는 두 종류 이하임을 확인하기 위해 map을 사용하고 map.size를 통해 2이하인지 확인하였다

단, 포인터를 이동할 때, 이전 포인터 값을 지워주고 해당 key에 대한 value가 만약 0이라면 map 자료구조에서 삭제하는 코드는 필수적이다!

 

코드

#include<bits/stdc++.h>
using namespace std;

int main() {
    int N; cin>>N;
    vector<int> v(N);
    map<int,int> mp;
    for(int i=0; i<N; i++) {
        cin>>v[i];
    }
    int s=0, ans = 0;

    for(int e=0; e<N; e++) {
        mp[v[e]]++;
        while(mp.size() > 2) {
            mp[v[s]]--;
            if(mp[v[s]] == 0) mp.erase(v[s]);
            s++;
        }
        ans = max(ans, e-s+1);
    }

    cout<<ans;


}

'Algorithm' 카테고리의 다른 글

[BOJ] 안정적인 문자열 4889번 C++  (0) 2025.03.28
[BOJ] 외계인의 기타 연주 2841번 C++  (0) 2025.03.28
[BOJ] 포도주 시음 31589번 C++  (0) 2025.03.12
[BOJ] 게으른 백곰 10025번 C++  (0) 2025.03.11
[BOJ] 세워라 반석 위에 21967번 C++  (0) 2025.03.06
'Algorithm' 카테고리의 다른 글
  • [BOJ] 안정적인 문자열 4889번 C++
  • [BOJ] 외계인의 기타 연주 2841번 C++
  • [BOJ] 포도주 시음 31589번 C++
  • [BOJ] 게으른 백곰 10025번 C++
따봉치치
따봉치치
따봉치치
김치치의개발블로그
따봉치치
전체
오늘
어제
  • 분류 전체보기 (359)
    • 면접질문 (4)
    • CS (50)
    • FE (116)
      • Javascipt (16)
      • Typescipt (6)
      • React (16)
      • CSS (5)
      • Nextjs (1)
      • 리뷰 (70)
    • Algorithm (181)
    • ETC (3)
      • Bootcamp (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백트래킹
  • 그리디
  • 그래프 탐색
  • 탐욕 알고리즘
  • 리액트
  • 자바스크립트
  • dp
  • 데이터베이스
  • BOJ
  • C++
  • TOPCIT
  • react
  • Greedy
  • 문자열
  • 알고리즘
  • 우선순위 큐
  • 백준
  • 누적합
  • 스택
  • 자료구조
  • CS
  • 모던 리액트 딥다이브
  • 투 포인터
  • 완전탐색
  • javascript
  • Stack
  • Fe
  • typescript
  • BFS
  • 모던 자바스크립트 딥다이브

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
따봉치치
[BOJ] 과일 탕후루 30804번 C++
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.