문제
정답 코드
#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
'알고리즘 > 백준-실버' 카테고리의 다른 글
백준 4559번 비밀번호 발음하기(C++) (0) | 2023.01.06 |
---|---|
백준 2910번 빈도정렬 (C++)(stable, unordered_map, find와 find_if,람다식,stable_sort) (0) | 2023.01.05 |
백준 1992번 쿼드트리 (C++) (0) | 2023.01.05 |
백준 2583번 영역 구하기(C++) (0) | 2023.01.05 |
백준 2468번 안전영역(C++) (0) | 2023.01.05 |