성우리뷰

(softeer) 로봇이 지나간 길

두원공대88학번뚜뚜 2023. 4. 12. 13:52
import sys

def start(y, x):
    global maxx, maxy, direc, direcnum
    #4구석탱이인 경우나 하나 구석인 경우나 4면 다 뚫린 경우
    dx = [1, 0, -1, 0]
    dy = [0, 1, 0, -1]

    cnt, dirr = 0, 0
    for i in range(4):
        nx, ny = x + dx[i], y + dy[i]
        if nx < 0 or ny < 0 or ny >= maxy or nx >= maxx:
            continue
        if mp[ny][nx] == '#':
            cnt = cnt+1
            dirr = i
    if cnt == 1:
        if dirr == 0 :
            direc, direcnum = '>', 0
        elif dirr == 1:
            direc, direcnum = 'v', 1
        elif dirr == 2:
            direc, direcnum = '<', 2
        else:
            direc, direcnum = '^', 3
        return 1
    else:
        return 0

def dfs(y, x, direcnum):
    #오아왼위
    dx = [1, 0, -1, 0]
    dy = [0, 1, 0, -1]

    nextx, nexty, nextdir, keep = x, y, direcnum, 0
    for i in range(4):
        nx, ny = x + 2 * dx[i], y + 2 * dy[i]
        if nx < 0 or ny < 0 or ny >= maxy or nx >= maxx:
           continue
        if direcnum - i == 2 or direcnum - i == -2:
            continue
        if mp[ny][nx] == '#' and mp[y + dy[i]][x + dx[i]] == '#':
            keep = 1
            #print(direcnum, i, direcnum - i)
            if direcnum == i:
                answ.append('A')
            elif direcnum - i == -3:
                answ.append('LA')
            elif direcnum - i == 3:
                answ.append('RA')
            elif direcnum - i == -1:
                answ.append('RA')
            else :
                answ.append('LA')
            nextx, nexty, nextdir = x+2 * dx[i], y+ 2 *dy[i], i
            break
    if keep == 1:
        dfs(nexty, nextx, nextdir)
    return

maxy, maxx = map(int, input().split())
mp = [[] for _ in range(maxy)]
for i in range(maxy):
    tmp = input()
    mp[i] = tmp
#print(mp)

startx, starty, startflag, direc, direcnum = 0, 0, False, '.', 0
for i in range(maxy):
    for j in range(maxx):
        if mp[i][j] == '.' :
            continue
        if start(i, j) >= 1:
            startx, starty, startflag = j, i, True
            break
    if startflag == True:
        break

#오왼위아 : 0123

#print(direcnum)

answ = []
dfs(starty, startx, direcnum)
str = ''
for i in range(len(answ)):
    str += answ[i]
print(starty+1, startx+1, '\n', direc, '\n', str, '\n')
#print(direc)
#print(str)