알고리즘/BOJ

백준 1783번 병든 나이트

꾸준함. 2018. 6. 22. 13:50

문제 링크입니다: https://www.acmicpc.net/problem/1783


아래와 같이 4가지의 경우로 나누어서 생각하면 됩니다.

1. 세로가 1일 경우 움직이지 못하므로 1칸(시작하는 칸도 센다고 문제에서 명시)

2. 세로가 2일 경우 2번과 3번의 조건을 최대 3번까지 이용 가능

3. 세로가 3 이상일 경우

i) 가로가 6 이하이면 1번과 4번 그리고 2번 혹은 3번 사용해서 최대 4칸

ii) 가로가 7 이상이면 2번과 3번을 한번씩 사용하고 나머지는 1번과 4번


핵심은, 4회 이상 움직일 때 조건 1번~4번을 적어도 한번씩은 사용해야한다는 것이였습니다!


#include <iostream>

#include <algorithm>

using namespace std;

 

int N, M;

 

int main(void)

{

        cin >> N >> M;

 

        if (N == 1) //세로 한칸이면 움직일 수 없다

                 cout << 1 << endl;

        else if (N == 2) //세로가 두 칸이면 2 3번만 가능(3회까지만 움직일 수 있다)

                 cout << min(4, (M + 1) / 2) << endl;

        //1, 2, 3, 4번이 적어도 한번씩은 나와야 한다

        else if (N >= 3)

        {

                 //가로가 6까지는 최대 4(1, 4, 2 or 3)

                 if (M <= 6)

                         cout << min(4, M) << endl;

                 else //2 3번 한번씩 나머지는 1, 4

                         cout << M - 2 << endl;

        }

 

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 14502번 연구소  (0) 2018.06.25
백준 2662번 기업투자  (2) 2018.06.22
백준 5567번 결혼식  (0) 2018.06.22
백준 1068번 트리  (0) 2018.06.22
백준 11404번 플로이드  (0) 2018.06.21