[BAEKJOON] 백준 1614: 영식이의 손가락 (C#)

2024. 6. 2. 14:33IT/BaekJoon

문제 링크

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

 

 

문제

영식이는 숫자를 셀 때, 왼손을 이용한다. 엄지손가락부터 시작해서 새끼손가락까지 차례대로 하나씩 센다. 그다음에 새끼손가락까지 센 다음에는 반대로 엄지손가락으로 다시 역방향으로 센다. 영식이는 자기가 원하는 숫자가 나올 때 까지 계속해서 이 방법으로 센다. 영식이는 절대 손가락을 건너뛰지 않는다. 예를 들어 숫자 10을 셀 때는, 엄지 → 검지 → 중지 → 약지 → 새끼 → 약지 → 중지 → 검지 → 엄지 → 검지 이렇게 센다.

영식이가 손가락을 하나 다쳤다. 영식이는 오른손으로는 셀 수 없기 때문에, 왼손으로 세야 한다. 다친 손가락을 이용해서 셀 수 있는 횟수가 제한되어 있다.

영식이가 셀 수 있는 최대 숫자를 출력하는 프로그램을 작성하시오.

 

 

입력

첫째 줄에 영식이가 다친 손가락이 주어진다. 엄지부터 차례대로 1, 2, 3, 4, 5로 번호가 매겨져 있다. 둘째 줄에는 영식이가 다친 손가락으로 몇 번 셀 수 있는지 주어진다. 이 수는 1,000,000,000보다 작거나 같은 자연수 또는 0이다.

 

 

출력

첫째 줄에 영식이가 셀 수 있는 수의 최댓값을 출력한다. 만약 시작도 할 수 없으면 0을 출력한다.

 

 

 

통과한 답안

namespace _1614
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int finger = int.Parse(Console.ReadLine());
            long cnt = long.Parse(Console.ReadLine());
            long result = 0;

            if (finger == 1)
            {
                result = cnt * 8;
            }
            else if (finger == 5)
            {
                result = cnt * 8 + 4;
            }
            else
            {
                result = cnt * 4 + (cnt % 2 == 1 ? 5 - finger : finger - 1);
            }

            Console.WriteLine(result);
        }
    }
}

 

엄지 - 1, 검지 - 2, 중지 - 3, 약지 - 4, 새끼 - 5 로 지정된 숫자와

그 손가락을 셀 수 있는 숫자(cnt)가 주어질 때,

해당 손가락을 cnt 만큼 사용했을 때, 최대로 셀 수 있는 수의 최댓값을 찾는 문제이다.

 

이 때, 엄지와 새끼 손가락은 1회씩, 나머지는 2회씩 세면서 왕복하므로

손가락에 대해 최대로 셀 수 있는 숫자의 최대치는 아래와 같이 정리할 수 있다.

숫자 0 1 2 3 4 5 6 7
손가락 1 2 3 4 5 4 3 2
숫자 8 9 10 11 12 13 14 15
손가락 1 2 3 4 5 4 3 2
숫자 16 17 18 19 20 21 22 23
손가락 1 2 3 4 5 4 3 2

 

위와 같이 1회 왕복하는데 8씩 증가하므로,

엄지 손가락과 새끼 손가락은 8의 배수를 이용하여 구할 수 있다.

엄지 손가락의 경우에는 8 * cnt로, 새끼 손가락의 경우에는 8 * cnt + 4로 구할 수 있다.

 

나머지 검지, 중지, 약지의 경우에는 8의 배수에 2번 씩 들어가므로

cnt의 수가 홀수인지 짝수인지에 따라 결과가 다르므로 이를 나누어서 생각해보면,

cnt가 홀수인 경우에는 엄지 -> 새끼로 가는 경우이고,

짝수인 경우에는 새끼 -> 엄지로 가는 경우이다.

따라서 이를 코드로 구현하면

result = cnt * 4 + (cnt % 2 == 1 ? 5 - finger : finger - 1);

 

로 정리할 수 있다.