728x90
https://softeer.ai/practice/info.do?idx=1&eid=577&sw_prbl_sbms_sn=145221
💡 문제 풀이
구현 문제이다.
경로를 구하는 도중에 만약 다음 칸으로 진행할 수 없다면 왼쪽과 오른쪽을 확인해서 바로 경로를 찾게 했다.
✔️ 느낀 점
오랜만에 구현 문제를 푸는데 조금 아쉬웠다. 중복된 코드를 최대한 줄여보고 싶었는데 생각보다 많이 못 줄인 것 같다.
💻 코드
import sys
input = sys.stdin.readline
ORDER = ">v<^"
VISITIED = "#"
moves = {
"^": (-1,0),
"v": (1,0),
"<": (0,-1),
">": (0,1),
}
a, b = map(int, input().split())
board = [list(input()) for _ in range(a)]
def isValidatePoint(x, y):
if 0 <= x < a and 0 <= y < b:
if board[x][y] == VISITIED:
return True
return False
def getStartPoint():
for x in range(a):
for y in range(b):
if board[x][y] == VISITIED:
cnt = 0
for direction in ORDER:
nx = x + moves[direction][0]
ny = y + moves[direction][1]
if isValidatePoint(nx, ny):
cnt += 1
if cnt == 1:
return (x, y)
def getDirection(x, y):
for direction in ORDER:
nx = x + moves[direction][0]
ny = y + moves[direction][1]
if isValidatePoint(nx, ny):
return direction
def getCommand(start, startDirection):
command = ""
x, y = start
currentDirection = startDirection
while True:
nx = x + moves[currentDirection][0]
ny = y + moves[currentDirection][1]
if isValidatePoint(nx, ny):
command += "A"
x = nx + moves[currentDirection][0]
y = ny + moves[currentDirection][1]
else:
idx = ORDER.index(currentDirection)
newDirection = currentDirection
for i in range(1, 4, 2): # 왼쪽 오른쪽
direction = ORDER[(idx + i) % 4]
nx = x + moves[direction][0]
ny = y + moves[direction][1]
if isValidatePoint(nx, ny):
if i == 1: command += "R"
else: command += "L"
newDirection = direction
if currentDirection == newDirection: return command
else: currentDirection = newDirection
def solution():
x, y = getStartPoint()
startDirection = getDirection(x, y)
command = getCommand((x, y), startDirection)
print(x+1, y+1)
print(startDirection)
print(command)
solution()
'문제 풀이 > 소프티어 (Softeer)' 카테고리의 다른 글
[Python] 소프티어 : 거리 합 구하기 (0) | 2023.02.20 |
---|---|
[Python] 소프티어 : 이미지 프로세싱 (0) | 2023.02.20 |
[Python] 소프티어 : 로드 밸런서 트래픽 예측 (0) | 2023.02.19 |
[Python] 소프티어 : 택배 마스터 광우 (0) | 2023.02.09 |
[Python] 소프티어 : [21년 재직자 대회 예선] 좌석 관리 (0) | 2023.02.09 |
댓글