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
- 문제
다친 손가락 hurtFinger이 주어지고 다친 손가락으로 몇 번 셀 수 있는지 maxRepeat이 주어지면 이를 이용해서 최대한 많은 숫자를 세는 문제다. 예를 들어 hurtFinger = 5이고 maxRepeat이 0이면 1,2,3,4해서 4까지 셀수가 있다.
- 해설
손가락을 엄지, 검지, 중지, 약지, 새끼순으로 1,2,3,4,5라고 했을 때 1과5의 경우랑 2,3,4의 경우랑 세는 방식이 다르다는 것을 알 수 있다. 1,2,3,4,5,4,3,2,1,2,3,4,5,4,3,2,1의 경우를 보더라도 1과 5는 어쩌다 한 번 들리는데 반해 2,3,4는 꾸준히 들리는 것을 볼 수 있다. 그렇기 때문에 우리는 3가지 경우를 가정해야 한다.
1. hurtFinger가 1일 경우
: 만약 maxRepeat가 0이면 0을 출력하면 되고, 1 이거나 그 이상이면 8의 배수처럼 증가하는 것을 볼 수 있다.
maxRepeat가 1일 경우 : 1,2,3,4,5,4,3,2로 8개
maxRepeat가 2일 경우 : 1,2,3,4,5,4,3,2,1,2,3,4,5,4,3,2 16개 ...
maxRepeat가 증가할때마다 8개씩 증가하는 것을 확인할 수 있다.
2. hurtFinger가 5일 경우
: 만약 maxRepeat가 0이면 4를 출력하면 되고, maxRepeat이 1 이상일 때부터 8의 배수로 늘어난다는 것을 확인할 수 있다.
maxRepeat가 1일 경우 : 1,2,3,4,5,4,3,2,1,2,3,4로 12개
maxRepeat가 2일 경우 : ...,5,4,3,2,1,2,3,4로 20개
maxRepeat가 증가할 때마다 8개씩 증가하는 것을 확인할 수 있다.
3. hurtFinger가 2,3,4일 경우
: 만약 maxRepeat가 0이면 hurtFinger-1을 출력하면 되고 1이거나 그 이상이면 번호를 세는 방법이 1,2,3,4처럼 증가하고 있던건지 4,3,2 처럼 감소하고 있던건지를 파악한 다음 해당 hurtFinger를 이용해서 마지막 숫자를 세면 된다.
처음빼고는 숫자를 2,3,4,5 혹은 4,3,2,1로 4개만 세니깐 4*maxRepeat + 1을 해서 처음에 1을 세는 걸 카운트해준다.
maxRepeat % 2 ==0인 경우 : hurtFinger - 2(2인 이유는 2가 가장 작은 hurtFinger이기 때문)를 더해준다
maxRepeat % 2 ==1인 경우 : 4- hurtFinger를 더해준다.
- 풀이
import sys
hurtFinger = int(sys.stdin.readline())
maxRepeat = int(sys.stdin.readline())
answer = 0
hurtCount = 0
# if hurtfinger is 1 or 5
if hurtFinger == 1:
if maxRepeat == 0:
answer += hurtFinger-1
else:
answer += 8*maxRepeat
elif hurtFinger == 5:
if maxRepeat == 0:
answer += hurtFinger-1
else:
answer += 4 + 8*(maxRepeat)
# else hurtfinger is 2,3,4
else:
if maxRepeat == 0:
answer += hurtFinger-1
else:
answer += 4*(maxRepeat) + 1
if maxRepeat % 2 == 0:
answer += hurtFinger-2
else:
answer += 4-hurtFinger
print(answer)
해설에서 설명한 바를 구현하였다.
'Algorithm > Baekjoon BOJ' 카테고리의 다른 글
[백준][파이썬] 1541번 : 잃어버린 괄호(코드, 해설, 풀이) (0) | 2022.05.06 |
---|---|
[백준][파이썬] 1213번 : 팰린드롬 만들기(코드, 해설, 풀이) (0) | 2022.05.04 |
[백준][파이썬] 2828번 : 사과 담기 게임(코드, 해설, 풀이) (0) | 2022.05.01 |
[백준][파이썬] 1475번 : 방 번호(코드, 해설, 풀이) (0) | 2022.05.01 |
[백준][파이썬] 2508번 : 사탕 박사 고창영(코드, 해설, 풀이) (0) | 2022.05.01 |