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 |
Tags
- 추천시스템
- 삼성 SDS Brigthics
- 노코드AI
- Brightics Studio
- 캐글
- 포스코 아카데미
- 포스코 청년
- 삼성 SDS
- 영상제작기
- 혼공학습단
- 혼공머신러닝딥러닝
- 데이터분석
- 데이터 분석
- 개인 의료비 예측
- 삼성SDS
- 브라이틱스 서포터즈
- 모델링
- 직원 이직여부
- 혼공
- Brigthics Studio
- Brightics를 이용한 분석
- 삼성SDS Brightics
- Brigthics
- 팀 분석
- 혼공머신
- Brigthics를 이용한 분석
- Brightics
- 직원 이직률
- 삼성SDS Brigthics
- 브라이틱스
Archives
- Today
- Total
데이터사이언스 기록기📚
[백준/Python] 16724번(DFS)_피리 부는 사나이 본문
📌문제 유형
자료 구조, 그래프 이론, 그래프 탐색, DFS, 분리 집합 (골드 3)
📌문제
📌나의 문제풀이
- 길은 같지 않지만, 이전에 만들어둔 safe zone이랑 겹칠 수 있음
- 예) RRLLLLL -> RR*LLLL 지나가는 경로는 다르지만 *만 겹칠 수 있음
- 상단 내용 참고하여 pass_road(현재 지나간 길)에 있으면 cnt에 1 더하고, pass_road에 없으면 cnt에 0 더함
- pass_road에 있으면 새로운 safe zone 만들어야 하기 때문
- pass_road에 없으면 이전 safe zone과 겹침
- 기본적으로 이미 지나간 길은 visited 처리
n,m = map(int,input().split())
maps = []
for _ in range(n):
row = list(map(str,input()))
maps.append(row)
def dfs(x,y):
dir = {'U':[-1,0], 'D' : [1,0], 'L' : [0,-1], 'R' : [0,1]}
# dir 위치 이동
nx = x + dir[maps[x][y]][0]
ny = y + dir[maps[x][y]][1]
# 현재 리스트에 있는 것 or 리스트에 없는 것 구분
if (nx, ny) in pass_road and visited[nx][ny] == 1: # 더해야 하는 것
return 1
elif (nx, ny) not in pass_road and visited[nx][ny] == 1:
return 0
if 0 <= nx < n and 0 <= ny < m and visited[nx][ny] == 0:
visited[nx][ny] = 1
pass_road.append((nx,ny))
return dfs(nx,ny)
cnt = 0
visited = [[0 for _ in range(m)] for _ in range(n)] # 현재 방문 체크
for a in range(n):
for b in range(m):
if visited[a][b] == 0:
visited[a][b] = 1
pass_road = [(a,b)]
ans = dfs(a,b)
cnt += ans
print(cnt)
📌다른사람의 문제풀이
- 유사한 방법으로 접근
# 피리부는 사나이
N, M = map(int,input().split())
Map = list(list(map(str,input())) for _ in range(N))
visit = [[-1 for _ in range(M)] for _ in range(N)]
direction = ['L','R','U','D']
dx = [0,0,-1,1]
dy = [-1,1,0,0]
def move(x,y,idx):
global answer
if visit[x][y] != -1: # 방문함
if visit[x][y] == idx:
answer += 1
return # 만일 형성된 사이클에 방문하더라도 idx가 다르기때문에 괜찮다
visit[x][y] = idx
i = direction.index(Map[x][y])
move(x + dx[i], y + dy[i], idx)
idx = 0
answer = 0
for n in range(N):
for m in range(M):
move(n,m,idx)
idx += 1
📌리뷰
- 문제 해결하는 반례 제공
- 어떠한 방식으로 DFS 응용할 수 있는지 고려
728x90
'Coding Test > 백준(Python)' 카테고리의 다른 글
[백준/Python] 1107번(구현)_리모컨 (0) | 2024.03.12 |
---|---|
[백준/Python] 1260번(DFS, BFS)_DFS와 BFS (0) | 2024.03.08 |
[백준/Python] 9935번(구현)_문자열 폭발 (0) | 2024.02.27 |
[백준/Python] 17144번_미세먼지 안녕! (0) | 2024.02.23 |
[백준/python] 1987번_알파벳(DFS) (0) | 2024.02.21 |
Comments