Koala - 12기/코딩테스트 준비 스터디

[백준/C++] 1614번 영식이의 손가락

소코기 2023. 10. 28. 13:20
  • 문제

https://www.acmicpc.net/problem/1614

 

1614번: 영식이의 손가락

1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 3, 4, 5, 4, 3 위와같이 세면 총 15를 셀 수 있다. 2번째 손가락을 3번 이용했으니 더 이상 사용할 수 없다.

www.acmicpc.net

  • 코드
  • #include <iostream>
    using namespace std;
    #define LL long long
    int main() {
        LL f = 0;
        LL n = 0;
        cin >> f;
        cin >> n;
        LL ans = 0;
        if (n != 0) {
            if (f == 1 || f == 5) {
                ans += n * 8;
                if (f == 1) {
                    cout << ans;
                }
                else if (f == 5) {
                    cout << ans + 4;
                }
            }
            else {
                if (n % 2 == 0) {
                    ans += n * 4;
                    if (f == 2) {
                        cout << ans + 1;
                    }
                    else if (f == 3) {
                        cout << ans + 2;
                    }
                    else if (f == 4) {
                        cout << ans + 3;
                    }
                }
                else {
                    ans += (n - 1) * 4;
                    if (f == 2) {
                        cout << ans + 7;
                    }
                    else if (f == 3) {
                        cout << ans + 6;
                    }
                    else if (f == 4) {
                        cout << ans + 5;
                    }
                }
            }
            

        }
        else if (n == 0)
        {
            cout << f - 1;
        }
    }
  • 문제 해결 방법
  • 시간 초과를 해결했는데도 계속 틀렸습니다가 떠서 당황했던 문제였다. 질문 게시판에서 LL을 쓰라는 말을 듣고 LL이 뭔지 검색했더니 int 형으로는 20억 이상의 숫자를 저장할 수 없었고 long long 데이터형을 사용해야했다...
  • 문제해결 방법은 어차피 다친 손가락 사용을 10번 허용하든 100번 허용하든 1000번 허용하든 8번째마다 나오는 손가락  수가 일정하므로(1과 5는 한번, 나머지는 두번) 맨 마지막 8번째의 손가락 수만 더하면 되는 것이었다. 그리고 n이 0일때는 간단하게 손가락 수 -1을 해주면 된다.