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 |
1 |
2 |
4 |
2 ; -1로 후처리 |
2 |
5 |
1 |
4 |
6 |
2 |
4 |
7 |
3 ; -1로 후처리 |
4 |
8 |
2 |
6 |
9 |
3 |
6 |
10 |
2 |
8 |
11 |
3 |
8 |
12 | 4 | 8 |
13 | 3 | 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
'코딩테스트 연습 > 백준' 카테고리의 다른 글
[백준] 1193번 : 분수찾기 in python 쉽게설명하기 (0) | 2019.08.28 |
---|---|
[백준] 2292번 : 벌집 in python 코드 및 설명 (0) | 2019.08.24 |
[백준] 1712번 : 손익분기점 in python (0) | 2019.08.22 |
[백준] 1316번 : 그룹 단어 체커 in python (0) | 2019.08.21 |
[백준-python] 2908번 : 상수 (0) | 2019.08.16 |