알고리즘/백준-실버

백준 2828번 사과 담기 게임(C++)

뜨거운 개발자 2023. 1. 5. 00:34

문제

정답 코드

#include <iostream>

using namespace std;

int main()
{
	int N,M,j;
	cin >> N>> M >> j;
	int L = 1;
	int aloc;
	int cnt =0;
	M--;
	for (int i=0;i < j;i++)
	{
		cin >> aloc;
		if (L <= aloc && aloc <= L + M)
			continue;
		else
		{
			if (aloc - (L + M) > 0)
			{
				cnt += (aloc - (L + M));
				L = aloc- M; // L + aloc - L - M ;
			}
			else
			{
				cnt += L-aloc;
				L = aloc; //L-L+aloc;
			}
		}
		// cout  << "L : "<<L << "\n";
		// cout  << "aloc : "<<aloc << "\n";
		// cout  << "cnt : "<< cnt << "\n";
	}
	cout << cnt ;
}

문제 풀이의 흐름

  • 이건 게임처럼 사과를 받는 게임을 생각하면 쉽다
  • 하늘에서 사과가 떨어지는 느낌으로 하면된다.
  • 늘 움직이는 가장 적은 수를 움직이는 걸 선택하면 문제는 쉽게 풀린다.

주의 할 점

  • 이 문제는 기본적으로 발판이 하나의 자리를 기본으로 먹는 걸 생각해야 한다.
  • 이게 헷갈려버리면 문제가 생각보다 어려워 진다.

반성 및 고찰

발판을 하나 빼주는 걸 생각을 못해서 계속 틀렸다..

손코딩을 보면 아무래도 문제 이해가 더 쉬울 것 같아 공유한다.

손코딩


Uploaded by N2T

728x90