Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- next_permutation
- DFS
- 스택/큐
- BFS
- Level 3
- 2020 카카오 인턴십
- 부스트코스
- 2019 KAKAO BLIND
- Level 2
- 구현
- 코드리뷰
- 백준
- 프로그래머스
- Level 4
- Gold 4
- 월간 코드 챌린지
- level 1
- SWEA
- Gold 5
- pass
- 백트래킹
- c++
- 삼성 SW 역량 테스트
- DP
- 브루트포스
- Web
- 코드 리뷰
- 2020 KAKAO BLIND
- 시뮬레이션
- 그리디
Archives
- Today
- Total
Min:D's Devlog
[프로그래머스][월간 코드 챌린지 시즌 1][C++] 삼각 달팽이 본문
문제
프로그래머스 월간 코드 챌린지 시즌 1 - 삼각 달팽이 (Level 2)
문제 풀이
접근 방식
이 문제는 프로그래머스 월간 코드 챌린지 시즌 1 2번 문제로,
아래의 그림과 같이 삼각형의 맨 위 꼭짓점부터 반시계 방향으로 숫자를 채워서,
첫 행부터 마지막 행까지 합친 새로운 배열을 구하는 문제이다.
우선 n×n 크기의 result 벡터를 만들어 모든 값을 -1로 할당해주었다.
이후 ↓ - → - ↖방향으로 이동하며 숫자를 채워주었다.
숫자를 채우는 과정은 방향을 바꿔야 하는 조건을 고려하여 다음과 같이 구현해주었다.
while (1) {
for (int i = 0; i < 3; i++) {
while (1) {
if (num > end) break;
x += dir[i][0], y += dir[i][1];
if (x >= n || y >= n || result[x][y] != -1) {
x -= dir[i][0], y -= dir[i][1];
break;
}
result[x][y] = num++;
}
if (num > end) break;
}
if (num > end) break;
}
이후, 삼각형 모양으로 각 행을 탐색하며 answer 벡터에 순서대로 넣어주어 답을 리턴하였다.
풀이 코드 - C++
#include <vector>
using namespace std;
vector<int> solution(int n) {
vector<vector<int>> result(n, vector<int>(n, -1));
int end = 0;
for (int i = 1; i <= n; i++) end += i;
int dir[3][2] = { {1,0},{0,1},{-1,-1} };
int x = 0, y = 0, cnt = 1, num = 2;
result[x][y] = 1;
while (1) {
for (int i = 0; i < 3; i++) {
while (1) {
if (num > end) break;
x += dir[i][0], y += dir[i][1];
if (x >= n || y >= n || result[x][y] != -1) {
x -= dir[i][0], y -= dir[i][1];
break;
}
result[x][y] = num++;
}
if (num > end) break;
}
if (num > end) break;
}
vector<int> answer;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
answer.push_back(result[i][j]);
}
}
return answer;
}
실행 결과
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][2019 KAKAO BLIND][C++] 길 찾기 게임 (0) | 2020.09.23 |
---|---|
[프로그래머스][월간 코드 챌린지 시즌 1][C++] 풍선 터트리기 (0) | 2020.09.22 |
[프로그래머스][월간 코드 챌린지 시즌 1][C++] 두개 뽑아서 더하기 (0) | 2020.09.19 |
[프로그래머스][2020 KAKAO BLIND][C++] 기둥과 보 설치 (0) | 2020.09.18 |
[프로그래머스][2020 KAKAO BLIND][C++] 자물쇠와 열쇠 (0) | 2020.09.17 |
Comments