[Problem Solving] 삼각 달팽이

Sean·2023년 11월 24일
0

Problem Solving

목록 보기
120/130

문제

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

풀이

아이디어

우선 저렇게 피라미드형 모양 말고 그냥 일반적인 2차원 리스트로 생각해서 푼다.

하나의 큰 과정을 다음과 같이 정의하였다.
cnt라는 변수를 일단 n으로 초기화하고 cnt가 0이 될 때까지 다음 과정을 반복한다.
각 과정은 cnt만큼 수행한다.

cnt = 4
1. 1 2 3 4와 같이 세로로 쭉 내리는 과정 => cnt -= 1
2. 5 6 7과 같이 가로로 쭉 적는 과정 => cnt -= 1
3. 8 9와 같이 대각선 왼쪽 위로 쭉 적는 과정 => cnt -= 1

이렇게 1 2 3번을 while(cnt > 0) 조건 하에 계속 돌려준다.

코드

def solution(n):
    board = [[0] * n for _ in range(n)]
    cnt = n
    num = 1
    row, col = 0, 0
    
    while(cnt > 0):
        #1) cnt번만큼 현재 row에서 밑으로 쭉 내려간다.
        for i in range(cnt):
            board[row][col] = num
            num += 1
            if i != (cnt-1):
                row += 1
        cnt -= 1
        col += 1
        #2) cnt번만큼 현재 col에서 오른쪽으로 쭉 밀고나간다.
        for i in range(cnt):
            board[row][col] = num
            num += 1
            if i != (cnt-1):
                col += 1
        cnt -= 1
        col -= 1
        row -= 1
        #3) cnt번만큼 현재 row, col에서 대각선 왼쪽위로 쭉 밀고나간다.
        for i in range(cnt):
            board[row][col] = num
            num += 1
            if i != (cnt-1):
                row -= 1
                col -= 1
        row += 1
        cnt -= 1
    
    answer = []
    for i in range(n):
        for j in range(i+1):
            answer.append(board[i][j])
    
    return answer
profile
여러 프로젝트보다 하나라도 제대로, 깔끔하게.

0개의 댓글