개발머해니

[프로그래머스] 정수를 나선형으로 배치하기 (python3) 본문

알고리즘

[프로그래머스] 정수를 나선형으로 배치하기 (python3)

왕행님 2024. 5. 9. 15:37
728x90
반응형

문제

https://school.programmers.co.kr/learn/courses/30/lessons/181832

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

[개요]

1. 오른쪽으로 돌다가 끝에 다다르면 아래쪽으로 방향 바꾸기

2. 아래쪽으로 돌다가 끝에 다다르면 왼쪽으로 방향 바꾸기

3. 왼쪽으로 돌다가 끝에 다다르면 위쪽으로 방향 바꾸기

 

[이슈]

끝을 어떻게 판단할 수 있을까?

1. 다음 좌표의 값이 0이 아니어야 함

2. 다음 좌표가 0보다 작거나, n보다 크거나 같으면 끝임

 

[파이썬문법]

1. 리스트 0으로 초기화 : answer = [[0 for i in range(n)] for j in range(n)]

 

 

정답코드

def solution(n):
    answer = [[]]
    answer = [[0 for i in range(n)] for j in range(n)]
    val = 0
    
    #우 하 좌 상
    d = 0
    dx = [0, 1,  0, -1] #행 
    dy = [1, 0, -1,  0] #열
    
    #현재 좌표
    cur = [0,0]
    
    while val < n*n:
        #현재좌표 값 채우기
        val += 1
        answer[cur[0]][cur[1]] = val
        
        #다음 좌표
        x = cur[0] + dx[d]
        y = cur[1] + dy[d]
        next = [x, y]
        #print(f"next={next}")
        
        #다음좌표값이 0보다 크면 방향 바꾸기
        #다음좌표가 맨끝이면 방향바꾸기 
        if (x>n-1 or x<0 or y>n-1 or y<0) or answer[next[0]][next[1]] > 0:
            if d < 3:
                d += 1
            else:
                d = 0
        
        #print(f"d={d}")
        
        #현재좌표를 다음 좌표로 바꾸기
        x = cur[0] + dx[d]
        y = cur[1] + dy[d]
        next = [x, y]
        cur = next
        
        #print(answer)
    
    return answer

 

728x90
반응형

'알고리즘' 카테고리의 다른 글

[백준] 2606 - 바이러스 (python3)  (0) 2024.05.10
[프로그래머스] 옹알이(1)  (0) 2024.03.25
[프로그래머스] 타겟넘버  (0) 2024.01.05
[파이썬] 괄호 짝 확인하기  (0) 2023.12.15
[파이썬] 런던 폭우 Ⅱ  (0) 2023.09.30