티스토리 뷰

반응형

🚀  들어가며...

  • '레벨 2'의 문제입니다.

 

🔗 문제  

https://programmers.co.kr/learn/courses/30/lessons/68645

 

코딩테스트 연습 - 삼각 달팽이

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]

programmers.co.kr

 

📑 내용

[ 문제 설명 ]

정수 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]

 

🔗 풀이

  1. 삼각 달팽이를 저장할 res와 res의 인덱스에 접근하기위한 x, y값을 각각 -1, 0 (x = -1, y = 0) 으로 초기화 시켜줍니다.
    x를 -1로 초기화시켜주는 이유는 이후 이중 for문 사용 시 초기에 x값을 0으로 시작할수 있도록 하기 위함이며,
    소스를 보시면 이해하실수 있으실겁니다.

  2. res에 저장할 수 num을 선언 및 초기화 합니다.

  3.  예를 들어 n이 4라고 한다면, 이중 for문으로 한변을 지날때마다 4개 -> 3개 -> 2개 -> 1개로 저장할 수가 적어지니
    0~n 까지, i~n 까지의 이중 for문을 작성합니다.

  4. i 를 %연산자를 이용하여 3단계로 구분하여,
    i % 3 == 0이면 down 

    i % 3 == 1이면 right 
    i % 3 == 2이면 up
  5. 알맞은 인덱스에 num을 1씩 늘리며 저장하면 res에 삼각 달팽이가 저장됩니다.

  6. 이중 for문으로 answer에 기존의 2차원 리스트를 하나로 합쳐주면 끝 입니다.

 

💌 소스코드

def solution(n):
    res = [[0] * n for _ in range(n)]   # 모두 0으로 개수만큼 세팅
    answer = []
    x, y = -1, 0        # for문 실행시 x값을 처음에 0으로 세팅해주기 위해 초기값은 -1로 세팅
    num = 1             # 들어갈 숫자

    for i in range(n):
        for j in range(i, n):
            # down
            if i % 3 == 0:          # 3으로 퍼센트연산해준 이유는 down/right/up 세 동작이기 때문
                x += 1

            # right
            elif i % 3 == 1:
                y += 1

            # up
            elif i % 3 == 2:
                x -= 1
                y -= 1

            res[x][y] = num        # res에 저장
            num += 1

    for i in res:
        for j in i:
            if j != 0:
                answer.append(j)   # 저장했던 배열 for문이용 합쳐줍니다.

    return answer

 

🙋🏻‍♂️ 후기

문제의 내용자체는 적은편이었으나 레벨2 난이도답게 구현난이도가 높았다고 생각합니다.

풀이의 핵심은 글자에 노란색 배경을 넣은 부분, 즉 초기화 및 이중포문 이용, %연산자를 이용하여 3단계로 구분하는 부분이며 위 문제 풀이시에는 손으로 그림을 그려가면서 푸시면 좀 더 구현방법이 쉽게 떠오르실 것이라고 생각듭니다

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함