[백준/Python] 1347번 - 미로 만들기

Sujin Lee·2022년 6월 2일
0

코딩테스트

목록 보기
57/172
post-thumbnail

문제

1347번 - 미로 만들기

문제 해결 과정

  • 바라보는 방향을 어떻게 설정할까?
    • 동남서북(idx: 0,1,2,3)
  • 초기(0,0)에서 움직이고 바라보는 방향에서 한 칸 이동할 때 미리 정의된 dx,dy를 더해서 이동
  • graph 는 홍준이가 이동한 좌표 값들이 들어감
  • 지도를 그리기 위한 준비
    • graph의 가장 작은 값과 가장 큰 값의 차이로 행과 열의 크기 구하기
    • graph는 음수값이 있으니까 가장 작은 값의 절대값을 더해줘서 양수로 만든다 -> 가장 왼쪽이고 가장 위에 있는 (가장 작은) 값을 (0,0) 쪽으로

시행착오

  • 값들이 마이너스일때 양수로 바꾸는 과정이 헷갈림 x축,y축으로 생각하여 값을 더해줘서 이동한다고 생각하자
  • map = [[False] *m for _ in range(n)] 이중배열 까먹지 말자
  • 계속 인덱스에러가 났음
    • map = [[False] *n for _ in range(m)] map = [[False] *m for _ in range(n)] 으로 수정,, 행과열 주의하자
import sys
length = int(sys.stdin.readline())
note = list(sys.stdin.readline().rstrip())

# 동남서북(idx: 0,1,2,3)쪽으로 한 칸 가는 좌표
dx = [0,1,0,-1]
dy = [1,0,-1,0]

# 초기 위치는 0,0 바라보는 방향은 남쪽(1)
x,y,direction= 0,0,1
graph = [[x,y]]

for i in note:
  if i == 'R':
    direction = (direction + 1) % 4
  if i == 'L':
    direction = (direction - 1) % 4
  if i == 'F':
    x = x + dx[direction]
    y = y + dy[direction]
    graph.append([x,y])

# 행    
n = max(graph)[0] - min(graph)[0] + 1

# 열
m = max(graph, key = lambda x:x[1])[1] - min(graph, key = lambda x:x[1])[1] + 1

min_x = min(graph, key = lambda x:x[0])[0] 
min_y = min(graph, key = lambda x:x[1])[1]

for i in graph:
  i[0] = i[0] + abs(min_x)
  i[1] = i[1] + abs(min_y)


# 이중배열 선언 
map =  [[False] *m for _ in range(n)]

for i in graph:
  if map[i[0]][i[1]] == False:
    map[i[0]][i[1]] = '.'

for i in map:
  for j in range(m):
    if i[j] == False:
      i[j] = '#'

for i in map:
  for j in range(len(i)):
    print(i[j],end="")
  print("")
profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글