백준 2828 c++ : 구현, 그리디?

magicdrill·2025년 4월 14일

백준 문제풀이

목록 보기
599/673

백준 2828 c++ : 구현

그 당시 최선의 선택이니 그리디 알고리즘일 수도 있다고 생각한다.

#include <iostream>
#include <vector>

using namespace std;

void input_data(int* N, int* M, int* J, vector<int>& apples);
int find_answer(int N, int M, int J, vector<int>& apples);

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

	int N, M, J;
	vector<int> apples;

	input_data(&N, &M, &J, apples);
	cout << find_answer(N, M, J, apples);


	return 0;
}

void input_data(int* N, int* M, int* J, vector<int>& apples) {
	int i, apple;

	cin >> *N >> *M;
	cin >> *J;
	for (i = 0; i < *J; i++) {
		cin >> apple;
		apples.push_back(apple);
	}

	return;
}

int find_answer(int N, int M, int J, vector<int>& apples) {
	int answer = 0;
	int left, right, current, distance;
	int i, j;

	//N : 스크린 너비
	//M : 바구니 칸
	//J : 사과 개수

	left = 1;
	right = M;
	for (i = 0; i < J; i++) {
		current = apples[i];
		cout << "original_location : " << left << "~" << right << "\n";

		if (current < left) {
			distance = left - current;
			
			left = left - distance;
			right = right - distance;
			answer = answer + distance;
		}
		else if (current >= left && current <= right) {
			;
		}
		else if (current > right) {
			distance = current - right;

			left = left + distance;
			right = right + distance;
			answer = answer + distance;
		}
		cout << "answer : " << answer << "\n";
		cout << "moved_location : " << left << "~" << right << "\n";
	}

	return answer;
}

0개의 댓글