코딩테스트/프로그래머스

프로그래머스 - 월간 코드 챌린지 시즌1 > 삼각 달팽이

aiemag 2021. 3. 28. 21:33
반응형

programmers.co.kr/learn/courses/30/lessons/68645?language=c

 

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

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

 

Solution

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
31
32
33
34
35
36
#include <stdio.h>
 
int dx[3= { 01-1 };
int dy[3= { 10-1 };
int a[1000][1000];
 
int* solution(int n) {
    
    int len = n * (n + 1/ 2;
    int* answer = (int*)calloc(len, sizeof(int));
    int dir = 0, cnt = 1;
    int ty = 0, tx = 0;
 
    while (1) {
        a[ty][tx] = cnt++;
        if (cnt > len) break;
 
        if (ty + dy[dir] == n || ty + dy[dir] < 0 ||
            tx + dx[dir] == n || tx + dx[dir] < 0 ||
            a[ty + dy[dir]][tx + dx[dir]] != 0) {
            dir = (++dir) % 3;
        }
 
        ty += dy[dir];
        tx += dx[dir];
    }
 
    int idx = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n && a[i][j]!=0; j++) {
            answer[idx++= a[i][j];
        }        
    }
 
    return answer;
}
cs

반응형