1. 문제
https://www.acmicpc.net/problem/1326
1326번: 폴짝폴짝
첫째 줄에 징검다리의 개수 N(1≤N≤10,000)이 주어지고, 이어서 각 징검다리에 쓰여 있는 N개의 정수가 주어진다. 그 다음 줄에는 N보다 작거나 같은 자연수 a, b가 주어지는 데, 이는 개구리가 a번
www.acmicpc.net
2. 풀이
import sys
input = sys.stdin.readline
from collections import deque
# n : 징검다리 개수
n = int(input())
# n_l : 징검다리 숫자 리스트
n_l = list(map(int, input().split()))
# s_p, e_p : 각각 시작 위치, 도착 위치
s_p, e_p = map(int, input().split())
def jump(n, n_l, s_p, e_p):
q = deque()
q.append(s_p)
visitCnt = [-1 for i in range(n)]
visitCnt[s_p] += 1
while q:
c_p = q.popleft()
for i in range(c_p, n, n_l[c_p]):
if visitCnt[i] == -1:
q.append(i)
visitCnt[i] = visitCnt[c_p] + 1
if i == e_p:
return visitCnt[i]
for i in range(c_p, -1, -(n_l[c_p])):
if visitCnt[i] == -1:
q.append(i)
visitCnt[i] = visitCnt[c_p] + 1
if i == e_p:
return visitCnt[i]
return -1
print(jump(n, n_l, s_p-1, e_p-1))
3. Feedback
- 위 문제에서는 문제의 내용을 잘못이해하여 처음 해결할때 코드를 아예 잘못 작성해서 틀렸다.
여러번 틀려가면서 뭔가 문제의 이해가 잘못되었다는 생각을 하여 다시 문제를 파악하여 코드를 수정 후 BFS 알고리즘을 사용하여 해결할 수 있었다.
코드를 어떤 알고리즘으로 효율적으로 잘설계할지도 중요하지만, 도메인 지식 즉 이해의 기반을 정확히 해두고 코딩을 하는것 또한 중요하다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 비슷한 단어(1406) (0) | 2023.03.27 |
---|---|
(Python)백준 코딩테스트 연습 - 에디터(1406) (0) | 2023.03.25 |
(Python)백준 코딩테스트 연습 - 팰린드롬 만들기(1254) (0) | 2023.03.15 |
(Python)백준 코딩테스트 연습 - 사람의 수(1206) (0) | 2023.03.14 |
(Python)백준 코딩테스트 연습 - 삼각형으로 자르기(1198) (0) | 2023.03.11 |