2024. 6. 2. 14:33ㆍIT/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);
로 정리할 수 있다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 3622: 어떤 호박의 할로윈 여행 (C#) (0) | 2024.06.03 |
---|---|
[BAEKJOON] 백준 3778: 애너그램 거리 (C#) (0) | 2024.06.03 |
[BAEKJOON] 백준 1560: 비숍 (C#) (1) | 2024.06.02 |
[BAEKJOON] 백준 1449: 수리공 항승 (C#) (0) | 2024.06.02 |
[BAEKJOON] 백준 1431: 시리얼 번호 (C#) (0) | 2024.06.02 |