๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Programming/Softeer

[Softeer][level3] ๋กœ๋ด‡์ด ์ง€๋‚˜๊ฐ„ ๊ฒฝ๋กœ (python)

728x90
๋ฐ˜์‘ํ˜•

https://softeer.ai/practice/info.do?idx=1&eid=577 

 

Softeer

์—ฐ์Šต๋ฌธ์ œ๋ฅผ ๋‹ด์„ Set์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. ์ทจ์†Œ ํ™•์ธ

softeer.ai

 

๋ฌธ์ œ

 

ํ’€์ด

bfs๋กœ ํ’€์ด.

์ฒ˜์Œ ์‹œ์ž‘์ ์„ ์ฐพ์„ ๋•Œ, '#'์ธ ๊ฒฝ์šฐ๋ฅผ ์ฐพ๊ณ  ์ฃผ๋ณ€์— '#'์ด ์œ ์ผํ•œ ๊ฒฝ์šฐ(์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ์ •ํ•ด์ง„ ๊ฒฝ์šฐ) ์‹œ์ž‘์ ์œผ๋กœ ํŒ๋‹จ.

๋งˆ์ง€๋ง‰์— ๊ฒฝ๋กœ ์ถ”๊ฐ€ํ•  ๋•Œ, ์ด ์ „์— ๊ฐ™์€๊ฒŒ ๋‚˜์™”๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ flag๋กœ ๊ตฌ๋ณ„ํ•˜์—ฌ R, L์ด ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •.

 

์ฝ”๋“œ

import sys
from pprint import pprint
from collections import deque

H, W = map(int, input().split())
map = [list(sys.stdin.readline().rstrip()) for h in range(H)]

visited = [[0] * W for _ in range(H)]
directions = ['>', '^', '<', 'v']       # ๋™,๋ถ,์„œ,๋‚จ
ans = []

dc = [1, 0, -1, 0]  # directions์™€ ์ˆœ์„œ ๋งž์ถฐ์„œ
dr = [0, -1, 0, 1]

def isStart(r, c) :             # ์‹œ์ž‘ ์ง€์ ๊ณผ ์‹œ์ž‘ ๋ฐฉํ–ฅ ์ฐพ๊ธฐ
    cnt = 0
    for i in range(4) : 
        nx = r + dr[i]
        ny = c + dc[i]
        if 0 <= nx < H and 0 <= ny < W :
            if map[nx][ny] == '#' :     # ์ฃผ๋ณ€ 4๋ฐฉํ–ฅ ์ค‘ '#'์ด ์žˆ๋Š” ๊ฒฝ์šฐ
                cnt += 1
                start_direction = directions[i]
    
    if cnt == 1 :   # ์ฃผ๋ณ€์— '#'์ธ ๊ณณ์ด ์œ ์ผํ•œ ๊ฒฝ์šฐ ์‹œ์ž‘์ ์œผ๋กœ
        return 1
    else :
        return 0

def BFS(r, c) :
    path = []       # ๊ฒฝ๋กœ ์ €์žฅ์šฉ
    queue = deque()
    queue.append([r,c])
    visited[r][c] = 1

    while queue :
        row, col = queue.popleft()
        for i in range(4) :
            nr = row + dr[i]
            nc = col + dc[i]
            direction = directions[i]

            if 0 <= nr < H and 0 <= nc < W :
                if map[nr][nc] == '#' and not visited[nr][nc] :
                    visited[nr][nc] = 1
                    queue.append([nr, nc])
                    path.append(direction)
    
    return path

for h in range(H) :
    for w in range(W) :
        if map[h][w] == '#' and isStart(h, w) :     # ์‹œ์ž‘์ ์ธ ๊ฒฝ์šฐ
            print(h + 1, w + 1)
            path = BFS(h, w)
            print(path[0])
            
            tmp = 0
            flag = 0        # ์ด ์ „์— ์—ฐ์†๋˜์—ˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” flag
            for p in range(len(path) - 1) :      # ๋ช…๋ น์–ด ์ถœ๋ ฅ
                if flag :
                    flag = 0
                    if path[p] == path[p + 1] :
                        continue
                    else :
                        if directions[(directions.index(path[p]) + 1) % 4] == path[p + 1] :   # L์ธ ๊ฒฝ์šฐ
                            ans.append('L')
                        else :      # R์ธ ๊ฒฝ์šฐ
                            ans.append('R')
                if path[p] == path[p + 1] :
                    ans.append('A')
                    flag = 1
            
            for i in ans :
                print(i, end='')
            sys.exit(0)
728x90
๋ฐ˜์‘ํ˜•