소스 코드
# 움직임 횟수
n = int(input())
# 이동 경로
move = list(str(input()))
# 남 서 북 동
x = [1,0,-1,0]
y = [0,-1,0,1]
# 시작 위치
# 임의의 위치 0,0
temp = [[0,0]]
# 현재 바라보는 방향
dir = 0
# 현재 위치 값
i = 0
j = 0
for q in move:
# 앞으로 이동
if q == 'F':
i += x[dir % 4]
j += y[dir % 4]
temp.append([i,j])
# 오른쪽 바라보기
elif q == 'R':
dir += 1
# 왼쪽 바라보기
else:
dir += 3
# i 와 j 따로 저장
# 길이 알아내기 위함
i_idx = []
j_idx = []
for w in temp:
i_idx.append(w[0])
j_idx.append(w[1])
# 길이 저장
# board의 크기 결정
i_cnt = len(set(i_idx))
j_cnt = len(set(j_idx))
i_min = min(i_idx)
# 최소 값이 0보다 작으면 abs(최소값)만큼 다 더해주기
# 시작 위치를 0으로 고정하기 위해
if i_min < 0:
i_c = abs(i_min)
# 그 이상이면 변화 시킬 필요 없음
else:
i_c = 0
j_min = min(j_idx)
if j_min < 0:
j_c = abs(j_min)
else:
j_c = 0
# 아까 구했던 i와 j의 길이 값을 기반으로 board 생성
visited = [[0]*j_cnt for _ in range(i_cnt)]
# temp에 저장된 값 돌면서 방문한 곳은 . 처리
for e in temp:
visited[e[0]+i_c][e[1]+j_c] = '.'
# 방문하지 않은 곳은 벽으로 처리
for ii in range(i_cnt):
if ii != 0:
print()
for jj in range(j_cnt):
if visited[ii][jj] == 0:
print('#',end='')
else:
print(visited[ii][jj],end='')
해결 방법
1. 시작 위치를 임의로 정한 후, index 값을 만들어 감
2. 만들어진 index 값의 길이를 바탕으로 미로의 크기를 결정하고 미로를 만든다
느낀 점
ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.백준' 카테고리의 다른 글
[BOJ/백준 코딩] 치킨 배달 - PYTHON #15686 (0) | 2021.02.20 |
---|---|
[BOJ/백준 코딩] 안전 영역 - PYTHON #2468 (0) | 2021.02.19 |
[BOJ/백준 코딩] 체스판 다시 칠하기 - PYTHON #1018 (0) | 2021.02.16 |
[BOJ/백준 코딩] 꽃길 - PYTHON #14620 (0) | 2021.02.15 |
[BOJ/백준 코딩] 이동하기 - PYTHON #11048 (0) | 2021.02.14 |