Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 |
30 | 31 |
Tags
- 혼공머신
- 추천시스템
- 삼성SDS Brigthics
- Brightics를 이용한 분석
- 포스코 아카데미
- 영상제작기
- Brigthics를 이용한 분석
- 삼성SDS
- 혼공학습단
- 삼성 SDS
- 혼공
- Brightics Studio
- Brightics
- 포스코 청년
- 팀 분석
- 삼성 SDS Brigthics
- 브라이틱스
- 데이터 분석
- 직원 이직여부
- 노코드AI
- 데이터분석
- 삼성SDS Brightics
- 직원 이직률
- 브라이틱스 서포터즈
- 캐글
- Brigthics Studio
- 개인 의료비 예측
- 모델링
- 혼공머신러닝딥러닝
- Brigthics
Archives
- Today
- Total
데이터사이언스 기록기📚
[백준/Python] 16928번_뱀과 사다리 게임(BFS) 본문
📌문제 유형
그래프 이론, 그래프 탐색, BFS
📌문제
16928번: 뱀과 사다리 게임
첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으
www.acmicpc.net
📌나의 문제풀이
- 오답 (28% 메모리 초과)
- 메모리초과 이유
- visited[new] == 0이 아닌 경우도 고려함
-> (그럴필요 없음) 0일 경우가 제일 최소값이기 때문 - 예) 1-3 (1번) / 1-2-3 (2번)
from collections import deque
## 입력 ##
n, m = map(int,input().split())
ladder_or_snake = {}
for _ in range(n):
x,y = map(int,input().split())
ladder_or_snake[x] = y
for _ in range(m):
u,v = map(int,input().split())
ladder_or_snake[u] = v
## 코드 작성
visited = [0 for _ in range(101)]
num = 1
q = deque([])
q.append(num)
while q:
now = q.popleft()
if now == 100:
break
for i in range(1,7):
new = now + i
if new < 101:
if new in ladder_or_snake.keys():
new = ladder_or_snake[new]
if visited[new] == 0:
visited[new] = visited[now] + 1
else:
visited[new] = min(visited[new], visited[now] + 1)
else:
if visited[new] == 0:
visited[new] = visited[now] + 1
else:
visited[new] = min(visited[new], visited[now] + 1)
q.append(new)
print(visited[100])
-정답
- 최대 100개 위치 다 순회하면서 최솟값 찾기
- start, end가 연결되는 형태 -> dict 사용
from collections import deque
## 입력 ##
n, m = map(int,input().split())
ladder_or_snake = {}
for _ in range(n):
x,y = map(int,input().split())
ladder_or_snake[x] = y
for _ in range(m):
u,v = map(int,input().split())
ladder_or_snake[u] = v
## 코드 작성
visited = [0 for _ in range(101)]
num = 1
q = deque([])
q.append(num)
while q:
now = q.popleft()
if now == 100:
break
for i in range(1,7):
new = now + i
if new < 101 and visited[new] == 0:
if new in ladder_or_snake.keys():
new = ladder_or_snake[new]
if visited[new] == 0:
visited[new] = visited[now] + 1
q.append(new)
print(visited[100])
📌리뷰
- BFS는 꼭 2차원 배열을 사용하지 않아도 됨. 고정관념 탈피하기.
- 꼬리 물면서 값 변한다 - dict 사용 고려
728x90
'Coding Test > 백준(Python)' 카테고리의 다른 글
[백준/python] 1987번_알파벳(DFS) (0) | 2024.02.21 |
---|---|
[백준/Python] 1043번_거짓말(그래프 탐색) (0) | 2024.02.18 |
[백준/Python] 14500번(구현)_테트로미노 (0) | 2024.02.15 |
[백준/Python] 5430번(구현)_AC (0) | 2024.02.10 |
[백준/Python] 25195번(DFS)_Yes or yes (0) | 2024.02.09 |
Comments