[BOJ/20922] 겹치는 건 싫어, c++

2021. 4. 5. 18:50·DEV/PS

www.acmicpc.net/problem/20922

 

20922번: 겹치는 건 싫어

홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 $K$개 이하로 들어 있는 최장 연속 부분 수열

www.acmicpc.net

한줄 후기 : 덱이 진짜 편한거 같어

 

신촌 겨울 알고리즘 캠프 초급 모의고사 문제다.

저번에 한번 심심해서 풀어봤다.

문제 이해는 참 쉬웠는데 은근 뭐로 접근해야할 지 고민한 문제.

그러다 덱을 써보자 하고 덱을 써서 풀었다.

길이가 20만이라 당연히 완전탐색은 무리다.

//AC
//BOJ 20922 겹치는 건 싫어

#include <iostream>
#include <deque>
using namespace std;
deque<int> dq;
int count[101010];
int main(){
	int N, K, a, cnt=0, ans=0;
	scanf("%d %d", &N, &K);
	for(int i=0; i<N; i++){
		scanf("%d", &a);
		count[a]++;
		if(dq.empty()){
			dq.push_back(a);
		}
		else{
			if(count[a] <= K){
				dq.push_back(a);
			}
			else{
				int tmp = -1;
				while(tmp != a && !dq.empty()){
					tmp = dq.front();
					dq.pop_front();
					count[tmp] -= 1;
				}
				dq.push_back(a);
			}
		}
		cnt = dq.size();
  		ans = max(ans,cnt);
	}
	printf("%d", ans);
	return 0;
}

숫자를 받으면서 덱에 넣어주기 전에 지금까지 나온 해당 수의 개수를 카운팅 해준다.

count[a]++ 이 부분

이제 덱에 넣어야 하는데

만약에 현재 a의 개수가 허용 가능한 K 보다 작으면 바로 덱에 넣고, 아닐 경우 덱에 앞쪽에서부터 해당 수가 나올 때 까지 숫자를 다 뺀다.

해당 수가 나오면 덱에 넣어준다.

그러면 덱에 있는 숫자들은 모두 지금까지 나온 수들로 만들 수 있는 범위 내에 허용되는 최장 길이 수열이 된다.

매번 덱의 사이즈를 현재 최댓값이랑 비교하여 마지막 ans를 출력하면 된다.

 

풀고나서 알고리즘 분류를 보니 투포인터네? 덱으로도 풀린다 ㅎㅎ

저작자표시 비영리 변경금지 (새창열림)

'DEV > PS' 카테고리의 다른 글

[BOJ/2109] 순회 강연, c++  (0) 2021.04.08
[BOJ/21318] 피아노 체조, c++  (0) 2021.04.05
[BOJ/14938] 서강 그라운드, c++  (0) 2021.04.05
[BOJ/20924] 트리의 기둥과 가지, c++  (0) 2021.03.29
[BOJ/9466] 텀 프로젝트, c++  (0) 2021.03.16
'DEV/PS' 카테고리의 다른 글
  • [BOJ/2109] 순회 강연, c++
  • [BOJ/21318] 피아노 체조, c++
  • [BOJ/14938] 서강 그라운드, c++
  • [BOJ/20924] 트리의 기둥과 가지, c++
jobchae
jobchae
말하는 감자지만, 코드를 끄적이는 Node.js 백엔드 개발자입니다.
  • jobchae
    JOBCHAE
    jobchae
  • 전체
    오늘
    어제
    • 🚀 JOBCHAE (182)
      • DEV (151)
        • PS (108)
        • Node.js (12)
        • React (3)
        • docker (1)
        • 잡다한 개발 일지 (21)
        • injection (1)
        • JS, TS (3)
        • DB (2)
      • 축구 (0)
      • 일상 (19)
      • 영화 (3)
      • 음악 (8)
  • 블로그 메뉴

    • 💻 Github
    • 🙋🏻 Linkedin
    • 📖 방명록
  • 링크

    • PS Github
  • 공지사항

  • 인기 글

  • 태그

    SOPT
    node.js
    이분탐색
    회고
    슬랙
    PS
    DFS
    boj
    렛츠락페스티벌
    리액트
    일상
    DP
    슬랙봇
    nodejs
    우선순위큐
    GitHub
    db
    react
    JavaScript
    BFS
    위상정렬
    Express
    백준
    알고리즘
    Nest.js
    앱잼
    솝트
    typescript
    mongoDB
    개발
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
jobchae
[BOJ/20922] 겹치는 건 싫어, c++
상단으로

티스토리툴바