본문 바로가기
Algorithm/Implementaion

[백준] 1913번 달팽이

by 등촌동 꼬북이 2020. 11. 26.

깡 구현 그 자체...

 

BFS에서 길 찾기 했던거 약간 응용함..

 

쓰읍.... 가독성을 위해 코드 길이가 길어졌는데..

 

썩 효율적이지도 못한거 같다..

 

N = int(input())
findNum = int(input())
snail = [[0] * N for _ in range(N)]
direction = [[1, 0], [0, 1], [-1, 0], [0, -1]] # 하 우 상 좌
diCurrent = 0
cX = 0
cY = 0
findX = 0
findY = 0
nN = N * N

while True:
    if snail[cY][cX] == 0:
        snail[cY][cX] = nN
        nN -= 1
        if nN == 0:
            break
        cY += direction[diCurrent][0]
        cX += direction[diCurrent][1]

        if cY == N:
            cY -= 1
            diCurrent += 1
            if diCurrent == 4:
                diCurrent = 0
            cX += direction[diCurrent][1]

        if cY == -1:
            cY += 1
            diCurrent += 1
            if diCurrent == 4:
                diCurrent = 0
            cX += direction[diCurrent][1]

        if cX == N:
            cX -= 1
            diCurrent += 1
            if diCurrent == 4:
                diCurrent = 0
            cY += direction[diCurrent][0]

        if cX == -1:
            cX += 1
            diCurrent += 1
            if diCurrent == 4:
                diCurrent = 0
            cX += direction[diCurrent][1]

        if snail[cY][cX] != 0:
            cY -= direction[diCurrent][0]
            cX -= direction[diCurrent][1]
            diCurrent += 1
            if diCurrent >= 4:
                diCurrent = 0
            cY += direction[diCurrent][0]
            cX += direction[diCurrent][1]

for i in range(N):
    for j in range(N):
        if snail[i][j] == findNum:
            findX = i + 1
            findY = j + 1
        print(snail[i][j], end=" ")
    print()

print(findX, findY)

'Algorithm > Implementaion' 카테고리의 다른 글

[백준] 1417번 국회의원 선거  (0) 2020.11.28
[백준] 11286번 절대값 힙  (0) 2020.11.26
[백준] 1032번 명령 프롬프트  (0) 2020.11.25
[백준] 1966번 프린터 큐  (0) 2020.11.25
[백준] 7568번 덩치  (0) 2020.11.25

댓글