프로그래머스에서 core dumped 나오면 에러 찾기 너무 힘들다...
vector index를 잘못 접근한 경우가 가장 많댜
문제 설명
정수 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 |
https://programmers.co.kr/learn/courses/30/lessons/68645
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(int n) {
vector<int> answer;
vector<vector<int>> snail(n, vector<int>(n, 0));
pair<int, int> start_p = make_pair(0, 0);
pair<int, int> end_p = make_pair(1, 1);
int value = 1;
int i = 0;
while (snail[start_p.first][start_p.second] == 0) {
//#1 ↓
for (int j = start_p.first; j < n - i; j++)
snail[j][start_p.second] = value++;
start_p = make_pair(n - i - 1, start_p.second+1);
if (snail[start_p.first][start_p.second] != 0)break;
//#2 →
for (int j = start_p.second; j < n - i * 2; j++)
snail[start_p.first][j] = value++;
start_p = make_pair(start_p.first, n - i * 2 - 1);
//#3 ↖
int sy = start_p.first - 1, sx = start_p.second - 1;
if (snail[sy][sx] != 0)break;
while (sy != end_p.first || sx != end_p.second) {
snail[sy][sx] = value++;
sy--, sx--;
}
snail[sy][sx] = value++;
start_p = make_pair(end_p.first + 1, end_p.second);
end_p = make_pair(end_p.first + 2, end_p.second + 1);
i++;
}
for (int y = 0; y < n; y++) {
for (int x = 0; x < n; x++) {
if(snail[y][x] !=0) answer.push_back(snail[y][x]);
else break;
}
}
return answer;
}
단순하게 n*n 의 vector에서 아래 우 왼쪽 대각선 위 순서로 값을 채워넣었다.
start point와 end point가 수열로 이루어진 점을 이용하려 했는데 못썼다...
다른 사람 소스 : 나는 규칙은 이해했는데 왜 이해한대로 구현하지 못했을까
#include <string>
#include <vector>
using namespace std;
int arr[1000][1000];
vector<int> solution(int n) {
vector<int> answer;
int p = n;
int k = 1;
int x = -1, y = 0;
for (int i = 0; i < n; i++) {
for (int j = p;j >= 1; j--) {
if(i%3==0) {
arr[++x][y] = k;
} else if (i % 3 == 1) {
arr[x][++y] = k;
} else if (i % 3 == 2) {
arr[--x][--y] = k;
}
k++;
}
p--;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
answer.emplace_back(arr[i][j]);
}
}
return answer;
}
'Coding Test' 카테고리의 다른 글
[카카오]Lv2 땅따먹기 C++ (재귀,DP) (0) | 2022.04.23 |
---|---|
[카카오]Lv2 영어 끝말잇기 C++ (0) | 2022.04.23 |
[DP]Level 2 점프와 순간 이동 C++ (동적계획법) (0) | 2022.04.21 |
[백준]20057 마법사 상어와 토네이도(시간초과) (0) | 2022.04.08 |
[백준]21610 마법사 상어와 비바라기 C++ (0) | 2022.04.07 |