728x90
반응형
https://www.acmicpc.net/problem/1388
1388번: 바닥 장식
형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나
www.acmicpc.net
문제를 풀면서 몰랐던 개념
DFS 알고리즘에 대한 개념
-> https://ye5ni.tistory.com/108 참고!
문제의 접근 방법
👀 '-' 모양의 나무 판자와 '|' 모양의 나무 판자를 나누어서 계산하기
👀 '-' 모양은 좌우(가로) 노드의 값을 비교하고 '|' 모양은 상하(세로) 노드의 값을 비교하기
👀 특정 조건을 만족해야 하는 탐색 기법의 경우에는 DFS를 사용하는 것이 유리함!
내가 막혔던 부분
💢 DFS 알고리즘 구현의 어려움
💢 변수에 공백을 할당하여 이전 값과 비교하는 것에 대한 아이디어
문제 풀이 방법
1. 알고리즘 없이 풀기
2. DFS 알고리즘을 사용하여 풀기
소스코드 (DFS 알고리즘을 사용한 풀이)
# dfs 알고리즘 함수 정의 def dfs(x,y): # 바닥 장식 모양이 '-' 일 때 if graph[x][y] == '-': graph[x][y] = 1 # 해당 노드 방문처리 for _y in [1,-1]: # 양옆(좌우) 확인하기 Y = y + _y # 좌우 노드가 주어진 범위를 벗어나지 않고 '-'모양이라면 재귀함수 호출 if (Y > 0 and Y < m) and graph[x][Y] == '-': dfs(x,Y) # 바닥 장식 모양이 '|' 일 때 if graph[x][y] == '|': graph[x][y] = 1 # 해당 노드 방문처리 for _x in [1,-1]: # 상하(위아래) 확인하기 X = x + _x # 상하 노드가 주어진 범위를 벗어나지 않고 '|' 모양이라면 재귀함수 호출 if (X > 0 and X < n) and graph[X][y] == '|': dfs(X,y) n,m = map(int, input().split()) # 방 바닥의 세로 크기 n, 가로 크기 m graph = [] # 2차원 리스트의 맵 정보 저장할 공간 for _ in range(n): graph.append(list(input())) count = 0 for i in range(n): for j in range(m): if graph[i][j] == '-' or graph[i][j] == '|': dfs(i,j) # 노드가 '-'이나 '|'일 경우에 재귀함수 호출 count += 1 print(count)
소스코드 (알고리즘 없이 구현한 풀이)
# 방 바닥의 세로 크기 n, 가로 크기 m n,m = map(int, input().split()) graph = [] # 2차원 리스트의 맵 정보 저장할 공간 for _ in range(n): graph.append(list(input())) # '-'모양의 나무 판자 개수 계산 count = 0 for i in range(n): a = '' for j in range(m): if graph[i][j] == '-': if graph[i][j] != a: count += 1 a = graph[i][j] # 'ㅣ'모양의 나무 판자 개수 계산 for j in range(m): a = '' for i in range(n): if graph[i][j] == '|': if graph[i][j] != a: count += 1 a = graph[i][j] print(count)
더보기
Reference
728x90
반응형
'백준 write-up > 완전 탐색' 카테고리의 다른 글
[백준] Best Grass : 11123번 - Python (0) | 2022.06.28 |
---|---|
[백준] 양 한마리... 양 두마리... : 11123번 - Python (0) | 2022.06.21 |
[백준] N과 M(1) : 15649번 - Python (0) | 2022.05.29 |
[백준] 단지번호붙이기 : 2667번 - Python (0) | 2022.01.11 |
[백준] 그림 : 1926번 - Python (0) | 2022.01.08 |