일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- lazy propagation
- 세그먼트 트리
- back propagation
- 다익스트라
- 회고록
- 2023
- dropout
- 우선 순위 큐
- 가끔은_말로
- 플로이드 와샬
- object detection
- Overfitting
- 분할 정복
- 문자열
- NEXT
- dfs
- 이분 탐색
- 가끔은 말로
- 알고리즘
- pytorch
- 백트래킹
- tensorflow
- 자바스크립트
- 크루스칼
- c++
- DP
- 미래는_현재와_과거로
- 너비 우선 탐색
- 조합론
- BFS
- Today
- Total
Doby's Lab
백준 13268번: 셔틀런 (Python) 본문
https://www.acmicpc.net/problem/13268
Solved By: Implementation
이번 문제는 여러모로 뿌듯하네요.
- 구현 문제이다 보니 생각할 부분들이 많아서 풀어낸 뒤 성취감
- Python으로 어려운 문제 풀어보기 성공
암튼 솔루션으로 넘어가 보겠습니다.
우선 자연수의 의미가 애매모호해서 0은 Exception으로 처리했습니다.
5m마다 콘이 있고, 20m까지 있어서 이동을 5m씩 해주는 게 좋지 않을까라는 생각을 했습니다. 1로 하면 시간문제에서 오래 걸릴까 염두가 났습니다.(물론 10000까지라서 크게 영향은 없을 듯합니다.)
1번째 콘으로 갔다가 오면 2번째 콘을 갔다 와야 하고, 이를 4번째 콘까지 반복하다가 끝나면 다시 1번째 콘부터 시작합니다.
이 점을 이용해서 while문에서 몇 번째 콘을 가야 하는지 알기 위해 t라는 변수에 모듈러 연산을 하여 알려주었습니다.
1) t번째 콘으로 갈 때
우선 갈 때의 경우를 보겠습니다.
5m씩 가면서(5를 빼주면서) n이 0보다 작거나 같으면 멈추고, 현재 구간이 어딘지 알기 위해 i + 1을 출력해주었습니다.
n이 0보다 작은 경우는 i + 1의 구간 사이에서 멈춘 것이고, 0과 같은 경우는 i + 1 구간의 끝점에서 멈춘 것과 같습니다.
그리고, 갈 때 멈출 수 있는 경우가 있기 때문에 flag 변수를 선언하여 갈 때 멈췄다고 알려주고, while문을 정지시킬 수 있게 해줍니다.
2) t번째 콘에서 돌아올 때
마찬가지로 5m씩 돌아오면서 0보다 작거나 같아지는 경우를 고려합니다.
+돌아올 때이므로 for문의 시작점과 끝점을 유의해야 합니다.
n이 0보다 작아지는 경우는 i + 1구간에서 멈췄다는 것으로 i + 1을 출력하고 멈춥니다.
n이 0과 같아지는 경우는 i + 1구간을 지나 i구간의 끝점에서 멈췄다는 것을 알고 있어야 합니다.
+
즉, 몇 번째 콘인지를 어떻게 아느냐와 갈 때와 돌아올 때의 케이스들에서 언제 멈추는지를 고려할 수 있다면 문제를 풀 수 있습니다.
확실히 구현 문제를 푸니 성취감이 꽤 있고, 코드에서 디테일한 부분을 요구하네요. 탑다운 기법에서 밑바닥까지 디테일을 볼 수 있는 능력을 키워야겠습니다.
n = int(input())
cnt = 0
flag = 1
if n == 0:
print(0)
while n > 0:
# t번째 콘
t = cnt % 4 + 1
# 갈 때
for i in range(0, t):
n -= 5
if n <= 0:
print(i + 1)
flag = 0
break
# 갈 때 멈출 수 있기 때문에 돌아오는 case 제외
if flag == 0:
break
# 돌아올 때
for i in range(t - 1, -1, -1):
n -= 5
if n < 0:
print(i + 1)
break
elif n == 0:
print(i)
break
cnt += 1
'PS > BOJ' 카테고리의 다른 글
백준 3733번: Shares (Python) (0) | 2022.07.04 |
---|---|
백준 17128번: 소가 정보섬에 올라온 이유 (C++) (0) | 2022.07.03 |
백준 14728번: 벼락치기 (C++) (0) | 2022.06.29 |
백준 16943번: 최대 페이지 수 (C++) (0) | 2022.06.29 |
백준 1535번: 안녕 (C++) (0) | 2022.06.29 |