본문 바로가기

백준/C++

[C++] 백준 1337번 - 올바른 배열

728x90

 

으... 너무 졸리다...

아직 시차적응이 안된건가...??

(아니면 그냥 피곤한걸수도)

 

얼른 끝내버리자~~~

 

 

문제 1337번

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

 

1337번: 올바른 배열

첫째 줄에 배열의 크기 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 배열의 원소가 한 줄에 하나씩 주어진다. 원소는 1,000,000,000보다 작거나 같은 음이 아닌 정수이

www.acmicpc.net

 

처음에 문제를 읽고 그냥 없는 숫자를 추가하면 되는거 아닌가 하다가 이해를 잘못해서 이상하게 코드를 작성하였다.

그래서 다른 분의 풀이를 참고했다.

 

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
	vector<int> num;
	int n,k;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> k;
		num.push_back(k);
	}

	sort(num.begin(), num.end());
	int res = 1;
	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			int val = num[j] - num[i];
			int count = j - i + 1;
			
			if (val <= 4) {
				res = max(res, count);
			}
		}
	}

	cout << 5 - res << '\n';
	
}

 

 

일단 입력을 받은 후에 해당 값들을 오름차순으로 정렬해준다. 

추가해야할 원소를 최소로 만들기 위해서 배열 값의 갯수가 최대가 되게 해야한다고 해서 그 최대를 res로 잡았다.

해당 인덱스에 있는 배열 값의 차를 val에 넣고, 해당 인덱스 구간에 있는 배열 값의 갯수는 count에 넣었다.

배열 값의 차가 4이하여서 해당 두 수를 전부 포함하는 올바른 배열을 만들 수 있다면 res를 res와 count 중 더 큰 값으로 갱신한다. 구해준 res는 배열 값의 갯수이기 때문에 올바른 배열의 크기인 5에서 res를 빼주면 원하는 값을 출력할 수 있다.

[참고] https://koder0205.tistory.com/350

 

 

 

 

 

처음에는 무슨 소리인지 몰라서 계속 이해하려고 노력했다. 드디어 이해할 수 있었지만, 다음에 보면 또 잊어버릴 것 같아서 복습이 필요할 것 같다. 

728x90

'백준 > C++' 카테고리의 다른 글

[C++] 백준 1260번 - DFS와 BFS  (2) 2024.03.04
[C++] 백준 1300번 - K번째 수  (0) 2024.03.04
[C++] 백준 2470번 - 두 용액  (2) 2024.03.01
[C++] 백준 2822번 점수 계산  (6) 2023.12.27
[C++] 백준 5800번 성적 통계  (4) 2023.12.26