코딩테스트 연습/백준

[백준] 2839번 : 설탕 배달 in python

슈퍼짱짱 2019. 8. 23. 09:00
반응형


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




코드1


1
2
3
4
5
n=int(input())-3
li=[1,2,1,2,3]
if n in [1,4] : print(-1)
elif n<=4 : print(li[n])
else : print(n//5+li[n%5])
cs



코드설명


입력 

 결과

 설명1

 설명2

 3 (= 0+3)

 1

 

 

 4 (= 1+3)

 -1

 

 

 5 (= 2+3)

 1

 

 

 6 (= 3+3)

 2

 

 

 7 (= 4+3)

 -1

 

 

 8 (= 5+3)

 2

 3의 입력결과 + 1 ∵ 8 = 3+5*1

 1 = 5//5

 9 (= 6+3)

 3

 

 

 10 (= 7+3)

 2

 5의 입력결과 + 1

 1 = 7//5

 11 (= 8+3)

 3

 6의 입력결과 + 1

 

 12 (= 9+3)

 4

 

 

 13 (= 10+3)

 3

 8의 입력결과 + 1 = 3의 입력결과 + 2 ∵ 13 = 3+5*2

 2 = 10//5

 14 (= 11+3)

 4

 


 15

 3

 5의 입력결과 + 2

 2 = 12//5

 16

 4

 6의 입력결과 + 2

 

 17 

 5

 ...

 

 18 

 4

 

 

 ...

 ...

 

 


* 3~7입력에 대한 결과를 li에 미리 저장해놓고 더해가는 방식. 

  단, 4와 7에 대한 결과는 2,3으로 하고 후에 다시 처리.




코드2


1
2
3
n=int(input())
print(-(n in[4,7]) or n - 2*n//5 * 2)
 
cs




코드설명


입력 

결과 

차이 

3

2 ; -1로 후처리 

; -1로 후처리  

10 

11 

12 

13 

10 

...   


입력//5 가 이전보다 커지는 순간부터 차이가 2씩 벌어진다.

즉, 입력//5*2가 계산식에 들어간다는 것을 알 수 있다.


단, 3//5=0이기 때문에 3-0*2 = 3이다. 

3-2가 1이기 때문에 ?//5가 1이 되어야 한다.

즉, 입력//5*2에 "입력" 대신 "2*입력"이 들어가면 된다. 


ex) 

- 입력 = 3) 3-(6//5)*2 = 1

- 입력 = 5) 5-(10//5)*2 = 1

- 입력 = 8) 8-(16//5)*2 = 2









반응형