작심 365
[백준 13901번] 로봇 - (python) 본문
문제 : https://www.acmicpc.net/problem/13901
📌 문제 탐색하기
이 문제의 경우 문제에서 시키는대로 구현만 하면 되는 구현 유형인것을 바로 알 수 있다.
방문한 지역도 다시 갈 수 없다고 했기때문에 방문여부를 체크할 변수가 필요하다. 하지만 굳이 배열을 하나 더 만들필요없이 한번 방문한 곳을 장애물과 같은 취급해주면 된다.
처음 격자 판에 대한 정보를 2차원 배열로 초기화 시켜주고 0 을 방문하지 않은 곳이라고 하고 1을 방문 or 장애물이 있는 곳이라고 가정하고 문제를 푼다.
그리고 고민했던 부분이 더이상 이동할 수 없는 경우를 체크하는 부분이였는데, 이부분은 변수 하나를 둬서 모든 방향을 다 바꿨는데도 이동이 불가능할 경우 더이상의 이동을 종료하는 것으로 풀었다.
📌 코드 설계하기
격자판 정보를 저장할 2차원 배열을 선언후 0으로 초기화 해주었다.
그리고 사용자 방향을 지정하기 위해 index를 맞춰서 tmp 배열을 생성해주었다.
사용자 방향에 대한 정보는 dx,dy 배열에 저장했다.
while문을 사용해서 더이상 이동이 불가능할때까지 이동을 반복한다.
📌 코드
R,C = map(int,input().split())
K = int(input())
obstacle = [[0]*C for i in range(R)] # 격자판 정보 저장
tmp = [(0,0),(-1,0),(1,0),(0,-1),(0,1)] # 상 , 하, 좌 , 우
dx = []
dy = []
for _ in range(K):
a,b = map(int,input().split())
obstacle[a][b] = 1 # 장애물 놓기
s,r = map(int,input().split()) # 시작 위치
tmp2 = list(map(int,input().split()))
for n in tmp2:
x, y = tmp[n]
dx.append(x)
dy.append(y)
# 현재 위치
ex = s
ey = r
obstacle[ex][ey] = 1 # 시작 위치 방문 처리
dir = 0 # 현재 이동 방향
cnt = 0
while True:
# 현재 사용자 지정 방향으로 이동할 수 있는지 확인
nx = ex + dx[dir]
ny = ey + dy[dir]
if nx >= 0 and nx < R and ny >= 0 and ny < C and obstacle[nx][ny] != 1:
ex = nx # 해당 위치로 이동
ey = ny
obstacle[ex][ey] = 1 # 해당 위치 방문 처리
cnt = 0
else:
dir = (dir+1) % 4 # 갈 수 없을때는 방향 전환
cnt +=1
if cnt == 4:
break
print(ex,ey)
'코테 > 백준' 카테고리의 다른 글
[백준19941번] 햄버거 분배 - (python) (1) | 2024.12.27 |
---|---|
[백준 2659번] 십자카드 문제 - (java) (3) | 2024.12.19 |
[백준 2012번] 등수 매기기 - (java) (1) | 2024.12.18 |
[백준 18230번] 2xN 예쁜 타일링 - (java) (1) | 2024.12.08 |
[백준 14247번] 나무 자르기 - (java,python) (2) | 2024.12.07 |
Comments