[홍익프로그래밍경진대회] 초콜릿 뺏어 먹기

1. 문제

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

2. 아이디어

K + 1번째 사탕을 i - K번째 통에 있는 개수와 똑같아 질 때까지 먹고 정렬한다.
정렬 후, 다시 K + 1번째 사탕을 살펴보고 i - K번째 통에 있는 사탕 갯수와 다르다면 먹는다.
이렇게 K + 1번째 사탕통 먹고 정렬하기를 반복하다가 K + 1사탕통과 i - K 사탕 개수가 같아지면 K + 2번째 사탕통을 먹기 시작한다.

3. 풀이과정

1) ⭕RIGHT⭕

  • 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

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

	int N, K;
	cin >> N >> K;

	vector<int> a(N + 1);
	a[0] = 0;
	for (int i = 1; i <= N; ++i) cin >> a[i];

	int candy = 0;
	int day = 0;

	for (int i = K + 1; i <= N; ++i) {
		while (1) {
			if (a[i] != a[i - K]) {
				day++;
				candy = candy + a[i] - a[i - K];
				a[i] = a[i - K];
				sort(a.begin(), a.end());
			}
			else break;
		}

	}

	cout << candy << " " << day;
	return 0;
}

좋은 웹페이지 즐겨찾기