본문 바로가기
PS/BOJ

[백준] 5883. 아이폰 9S(c++)

by backend 개발자 지망생 2024. 4. 26.

https://www.acmicpc.net/problem/5883

 

5883번: 아이폰 9S

사람 9명이 줄을 서있고 각 사람이 원하는 용량의 크기는 2, 7, 3, 7, 7, 3, 7, 5, 7 이다. 용량 3을 원하는 사람을 줄에서 빼버리면, 줄은 2, 7, 7, 7, 7, 5, 7가 되고, 7을 원하는 사람이 4명이 연속된 구간이

www.acmicpc.net

 

문제풀이에 대한 방법을 생각하는데 어려움을 겪었다.

중복없이 원소들을 저장하여 매 반복마다 순서대로 원소들을 제거 후 제일 긴 구간을 찾으면 된다.

 

풀고나서 다른 분의 풀이를 봤을 때 set이 있는 걸 보고 라이브러리 이용이 아쉽다는 생각을 했다.


#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <map>
#include <queue>
#include <string>
#include <cstring>
using namespace std;

using ll = long long;


int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int t, Max = 0;

	cin >> t;

	vector<int> a(t);
	vector<int> save; //중복없은 배열 저장용
	int chk[1000001] = { 0, }; //check용

	for (int i = 0; i < t; i++) {
		cin >> a[i];
		if (chk[a[i]] == 0) {
			chk[a[i]] = 1;
			save.push_back(a[i]); //중복 없이 넣기
		}
	}
	
	for (int i = 0; i < save.size(); i++) { //한 문자씩 제거
		vector<int> temp;
		temp = a; //임시 배열에 할당
		
		temp.erase(remove(temp.begin(), temp.end(), save[i]), temp.end()); // 원소 제거 및 사이즈 변경 위해

		int count = 1;
		for (int i = 0; i < temp.size()-1; i++) { // 구간 길이 재기
			if (temp[i + 1] == temp[i])
				count++;
			else
				count = 1;
			Max = max(count, Max);
		}

	}
	
	cout << Max;
	
	return 0;
}

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

[백준] 2559. 수열(c++)  (1) 2024.04.28
[백준] 15721. 번데기(c++)  (0) 2024.04.27
[백준] 15993. 1, 2, 3 더하기 8(c++)  (1) 2024.04.26
[백준] 10798. 세로읽기(c++)  (0) 2024.04.25
[백준] 2876. 그래픽스 퀴즈(c++)  (0) 2024.04.24