-
[프로그래머스/Level 2] 삼각 달팽이 (C++)알고리즘 문제풀이/프로그래머스 2020. 12. 29. 16:16
programmers.co.kr/learn/courses/30/lessons/68645
위의 그림에서 숫자가 채워지는 방향이 위/오른쪽/왼쪽 위 대각선 총 3가지인 것을 확인할 수 있습니다. 또한 방향의 전환은 n번 이루어지는 것을 확인할 수 있습니다. 이러한 규칙을 이용해서 2차원 배열에 값을 저장하고, 저장이 끝난 후 배열 전체를 탐색해 0보다 큰 경우만 벡터에 집어넣어 리턴하였습니다.
#include <string> #include <vector> using namespace std; int map[1001][1001]; vector<int> solution(int n) { vector<int> answer; int x = 0, y = 0, num = 1; for(int i = 0; i < n; i++) { switch(i % 3) { // 아래 방향 case 0: for(int j = i; j < n; j++) { map[x++][y] = num++; } x--; y++; break; // 오른쪽 방향 case 1: for(int j = i; j < n; j++) { map[x][y++] = num++; } x--; y-=2; break; // 왼쪽 위 대각선 방향 case 2: for(int j = i; j < n; j++) { map[x--][y--] = num++; } x+=2; y++; break; } } for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(map[i][j] > 0) answer.push_back(map[i][j]); } } return answer; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 2] 이진 변환 반복하기 (C++) (0) 2021.01.13 [프로그래머스/Level 2] 예상 대진표 (C++) (0) 2021.01.03 [프로그래머스/Level 3] 단어 변환 (C++) (0) 2020.11.24 [프로그래머스/Level 2] 조이스틱 (C++) (0) 2020.11.17 [프로그래머스/Level 2] 짝지어 제거하기 (C++) (0) 2020.11.10