본문 바로가기

Algorithm/Baekjoon BOJ

[백준][파이썬] 1614번 : 영식이의 손가락(코드, 해설, 풀이)

반응형

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)

  해설에서 설명한 바를 구현하였다.

반응형