프로그래머스

[프로그래머스/Level2] 삼각 달팽이 (Python)

굴잉 2024. 7. 1. 14:45
728x90

 

문제 설명

정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • n은 1 이상 1,000 이하입니다.

 

입출력 예

n result
4 [1,2,9,3,10,8,4,5,6,7]
5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9]
6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]

 


문제 풀이

💡 접근 방법

  • `answer` 0으로 채운 밑변의 길이와 높이가 n인 삼각 배열을 생성
  • 배열 값을 채울 수 반복
    • `next_r`, `next_c`를 구해 준다음
      • 조건에 만족하지 않으면 dir = (dir + 1) % 3
      • 조건에 만족하면 `c_r`, `c_c`에 대입

✏️ 문제 풀이

def solution(n):
    answer = [[0] * i for i in range(1, n + 1)]
    r = [1, 0, -1]
    c = [0, 1, -1]
    dir = 0
    c_r = 0
    c_c = 0

    num = sum([n for n in range(1, n + 1)])

    for i in range(1, num + 1):
        answer[c_r][c_c] = i

        next_r = c_r + r[dir]
        next_c = c_c + c[dir]

        if next_r >= n or next_c >= len(answer[next_r]) or answer[next_r][next_c] != 0:

            dir = (dir + 1) % 3
            c_r += r[dir]
            c_c += c[dir]
        else:
            c_r = next_r
            c_c = next_c

    return sum(answer, [])

 

🔗 문제 출처

 

프로그래머스

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

programmers.co.kr

 

728x90