코딩테스트/백준
[백준][Silver 2][python] 1347. 미로 만들기
코린영이
2024. 3. 31. 13:21
728x90
반응형
코딩테스트 문제 푸는 방향
1. 문제를 정독한다. 정독하면서 손으로 한 번 풀어본다.
2. 접근 방법을 구상한다.
3. 핵심 코드를 시각적으로 보이도록 손코딩한다.
4. 코드를 구현한다.
5. 디버깅 및 개선을 한다.
6. 부분 정답이 나올 시 1번으로 돌아가 더 꼼꼼하게 읽어보고 다른 접근 방법은 없는지 생각해본다.
문제번호. 문제이름
https://www.acmicpc.net/problem/1347
1347번: 미로 만들기
홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍
www.acmicpc.net
홍준이가 이동한 경로를 보고 미로를 추측하는 문제이다.
[문제 해결 방향]
최대 50칸을 전진할 수 있으니까 미로 크기를 #가 채워진 상태로 최대 101 * 101으로 만들어준다.
그리고 시작 점은 (50, 50)으로 해준 다음 이동시작!
이동하면서 x의 최소 최대, y의 최소 최대를 확인해서 이동한 부분만 확인할 수 있도록 해준다.
제대로 설명을 한 건지는 모르겠지만 이제 코드를 봅시다
[파이썬 코드]
length = int(input())
move = list(input())
# 동 남 서 북
direction_idx = [0, 1, 2, 3]
direction_move = [[1,0],[0,-1],[-1,0],[0,1]]
# 남으로 초기화
location = 1
map_map = [["#"]*101 for _ in range(101)]
temp = [50, 50]
min_x = 50
max_x = 50
min_y = 50
max_y = 50
map_map[50][50] = '.'
for i in move:
# print(i)
if i == 'R':
location = (location + 1) % 4
elif i == 'L':
location = (location - 1) % 4
elif i == 'F':
temp[0] += direction_move[location][0]
temp[1] += direction_move[location][1]
# print(temp[0], "와", temp[1])
map_map[temp[0]][temp[1]] = '.'
min_x = min(min_x, temp[0])
max_x = max(max_x, temp[0])
min_y = min(min_y, temp[1])
max_y = max(max_y, temp[1])
# print(min_x)
# print(max_x)
# print(min_y)
# print(max_y)
# print(map_map[min_x][min_y])
for i in range(max_y, min_y - 1, -1):
for j in range(min_x, max_x + 1):
print(map_map[j][i], end="")
print()
[참고 사이트]
https://zoosso.tistory.com/431
[BOJ] 백준 1347 미로 만들기
출처: https://www.acmicpc.net/problem/1347 Input 5 RRFRF Output .. .# 문제에서 N이 0보다 크고 50보다 작다고 했으므로 상하좌우 어떤 방향이든 한 방향으로만 가는 경우를 고려해서 미로의 크기를 101 × 101 설
zoosso.tistory.com
[느낀점]
좌표 문제에 슬슬 감이 잡혀가는 느낌쓰 ㅎㅎ
요즘 bfs, dfs 하다가 다시 구현 하니까 살짝 살맛난다ㅏ
이제 dp로 넘어가야징~~
728x90
반응형