12
06

문제설명

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


제한사항

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

입출력 예

nresult

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]

 

문제풀이

N에따라 1부터 N x (N + 1) / 2까지 커지는 값을 좌표에 값을 넣어두고 좌표 순서대로 출력하면 되는 문제다.

좌표에 값을 넣는 순서는 (1,1)에서 시작하여 3가지 방향으로 입력하며, 방향이 바뀌면 값을 넣는 갯수를 하나씩 줄여나간다. 

좌표가 (x,y)라고 할때,

첫번째 방향 : x를 1씩 더해주며 값을 넣는다.

두번째 방향 : y를 1씩 더해주며 값을 넣는다.

세번째 방향 : x,y를 1씩 빼주며 값을 넣는다.

 

ex) N = 6

1. 첫번째 방향 : (1,1)=>1 (2,1)=>2 (3,1)=>3 (4,1)=>4 (5,1)=>5 (6,1)=>6

2. 두번째 방향 : (6,2)=>7 (6,3)=>8 (6,4)=>9 (6,5)=>10 (6,6)=>11

3. 세번째 방향 : (5,5)=>12 (4,4)=>13 (3,3)=>14 (2,2)=>15

4. 첫번째 방향 : (3,2)=>16 (4,2)=>17 (5,2)=>18

5. 두번째 방향 : (5,3)=>19 (5,4)=>20

6. 세번째 방향 : (4,3)=>21

 

using System;
using System.Collections.Generic;

public class Solution {
    public int[] solution(int n) {
        int[] answer = new int[] {};
        
        int[,] temp = new int[n+1,n+1];
        
        int mode = 0;
        int xp = 0;
        int yp = 1;
        int num = 1;
        for(int i = n; i > 0; i--)
        {
            for(int j = i; j > 0; j--)
            {
                if(mode == 0)
                {
                    xp++;
                    temp[xp,yp] = num;
                    num++;
                }
                else if(mode == 1)
                {
                    yp++;
                    temp[xp,yp] = num;
                    num++;
                }
                else
                {
                    xp--;
                    yp--;
                    temp[xp,yp] = num;
                    num++;
                }
            }
            mode = (mode+1) % 3;
        }
        
        List<int> numlist = new List<int>();
        
        for(int i = 1 ; i <= n; i++)
        {
            for(int j = 1; j <=i; j++)
            {
                numlist.Add(temp[i,j]);
            }
        }
        
        answer = numlist.ToArray();
        return answer;
    }

 

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

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

입국심사(레벨3, C#)  (0) 2021.12.10
기능개발(레벨2, C#)  (1) 2021.11.30
K번째수(레벨1, C#)  (0) 2021.11.29
숫자 문자열과 영단어(레벨1, C#)  (0) 2021.11.26
조이스틱(레벨2, C#)  (0) 2020.07.22
COMMENT