반응형
문제
R관의 엘리베이터에는 1층부터 N층까지의 버튼이 있다. 장난기가 많은 셈터는 엘리베이터 버튼을 마구잡이로 눌러 장난을 하려고 한다. 그런데 멀리서 교수님이 험악한 표정으로 다가오고 있다! 빠르게 속도 계산을 한 결과, 교수님은 m초 후에 도착할 것으로 짐작된다. 셈터는 m초 동안 버튼을 있는 대로 누르고 튀어야겠다는 생각을 했다.
하지만 버튼을 아무렇게나 누르면 재미가 없으므로 다음 네 동작 규칙을 정해 놓고 따르려고 한다.
- 동작 1) 모든 버튼을 다 누른다.
- 동작 2) 짝수 버튼만 다 누른다.
- 동작 3) 홀수 버튼만 다 누른다.
- 동작 4) 1, 4, 7, ... , 3k + 1번 버튼만 다 누른다.
반드시 한 동작이 모두 끝나야 튀거나 다른 동작을 시작할 수 있다. 단, 아무것도 하지 않고 튈 수도 있다.
버튼 1개를 누르는 데는 1초가 걸린다. 버튼은 처음에는 모두 꺼져 있으며, 꺼진 버튼을 누르면 켜지고 켜진 버튼을 누르면 꺼진다. 셈터가 m초 이하의 시간 동안 버튼을 누르고 튀었을 때 교수님이 보게 될 버튼들의 상태는 몇 가지가 될 수 있는가? 단, 엘리베이터는 움직이지 않는다고 가정한다.
입력
첫째 줄에 두 정수 N (1 ≤ N ≤ 100,000), m (0 ≤ m ≤ 100,000)이 주어진다.
출력
마지막 버튼들의 상태가 될 수 있는 가짓수를 출력한다.
<코드>
#include<iostream>
#include<algorithm>
using namespace std;
int N, m;
int t1, t2, t3, t4;
int ans;
int main()
{
cin >> N >> m;
t1 = N;
t2 = N / 2;
t3 = (N + 1) / 2;
t4 = (N - 1) / 3 + 1;
// 아무것도 하지 않는다
ans++;
// 동작 1 (모든버튼)
if (t1 <= m) ans++;
// 동작 2 (짝수버튼)
if (N > 1 && t2 <= m) ans++;
// 동작 3 (홀수버튼)
if (N > 1 && t3 <= m) ans++;
// 동작 4 (3k+1버튼)
if (N > 2 && t4 <= m) ans++;
// 동작 2 & 동작 4 (짝수버튼 & 3k+1버튼)
if (N >= 3 && t2 + t4 <= m) ans++;
// 동작 3 & 동작 4 (홀수버튼 & 3k+1버튼)
if (N >= 3 && t3 + t4 <= m) ans++;
// 동작 1 & 동작 4 (모든버튼 & 3k+1버튼)
if (N >= 3 && t1 + t4 <= m) ans++;
cout << ans;
}
풀이 방법
n이 1일때는 동작1과 동작3이 같으므로 중복이 발생합니다.
그리고 동작 2와 아무것도 하지 않는것이 같으므로 중복이 발생합니다.
n이 2일때는 동작3과 동작4가 같으므로 중복이 발생합니다.
따라서 n이 1 또는 2일때를 주의해서 풀이를 하셔야합니다.
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[Python] 백준 1793번 - 타일링 (DP) (0) | 2021.01.19 |
---|---|
[C/C++] 백준 13565번 - 침투 (BFS) (0) | 2021.01.19 |
[C/C++] 백준 3976번 - 역습 (DP) (1) | 2021.01.19 |
[C/C++] 백준 16953번 - A → B (2) | 2021.01.17 |
[C/C++] 백준 11660번 - 구간 합 구하기 5 (DP) (0) | 2021.01.17 |