사용한 알고리즘
알고리즘 설명
- 다친 손가락과 가능 횟수의 따라서 수식이 정해진다.
case1. 횟수가 0인 경우, 다친 손가락 전까지 셀수 있다. 결과: N-1
case2. 첫번째 손가락을 다쳤다면, 결과: 8k+9
case3. 두번째 손가락을 다쳤다면, 결과 K가 홀수: 4K+5, K가 짝수: 4k+1
case4. 세번째 손가락을 다쳤다면, 결과: 4K+2
case5. 네번째 손가락을 다쳤다면, 결과 K가 홀수: 4K+3, K가 짝수: 4K+3
case6. 다섯번째 손가락을 다쳤다면, 결과: 8K+4
풀이
// baekjoon 1614 yechan
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
int N;
ll ret, K;
ll fun(ll x, int a, int b) {
return 1LL*a*x + b;
}
int main() {
scanf("%d%d", &N, &K);
if (K){
switch(N) {
case 1: ret = fun(K, 8, 1); break;
case 2:
if (K & 1) { ret = fun((K+1)/2-1, 8, 8); break; }
else { ret = fun(K/2, 8, 2); break; }
case 3: ret = fun(K, 4, 3); break;
case 4:
if (K & 1) { ret = fun((K+1)/2-1, 8, 6); break; }
else { ret = fun(K/2, 8, 4); break; }
case 5: ret = fun(K, 8, 5); break;
}
} else ret = N;
printf("%lld\n", ret-1);
return 0;
}