[프로그래머스/C++] 삼각 달팽이
1.문제 링크
2. 풀이 전 계획과 생각
- 규칙찾기
3. 풀이
#include <string>
#include <vector>
using namespace std;
bool check[1000][1000];
int map[1000][1000];
int dirx[] ={-1,0,1};
int diry[] ={-1,1,0};
vector<int> solution(int n) {
vector<int> answer;
int num=0; // 숫자
// 초기 설정 (ㄴ)
for(int i=0;i<n;i++){
num++;
map[0][i]=num;
check[0][i]= true;
}
for (int i = 0; i < n-1; ++i) {
num++;
map[i+1][n-1]=num;
check[i+1][n-1]=num;
}
int direction = 1;
int cx = n-1, cy=n-1;
int cnt_fail=0;
while(1){
// 범위를 벗어나는 경우 break
if(direction==1){
if(cx-1<0 || cy-1<0) break;
}
else if(direction==2){
if(cy+1>=n) break;
}
else if(direction==3){
if(cx+1>=n) break;
}
// 이미 입력된 배열이라면 방향바꾸기
if(check[cx+dirx[direction-1]][cy+diry[direction-1]]){
if(direction==3) direction=1;
else direction++;
// 실패횟수가 3이면 break
cnt_fail++;
if(cnt_fail==3) break;
}
else{ // 배열에 값 입력
cx=cx+dirx[direction-1];
cy=cy+diry[direction-1];
cnt_fail=0;
num++;
map[cx][cy]=num;
check[cx][cy]= true;
}
}
// 정답 number 저장
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
answer.push_back(map[j][i]);
}
}
return answer;
}
1.모든 n에 대해서 공통적으로 적용되는 ㄴ 자 형태를 채우기.
2-1. 3개방향에 대해서 범위를 벗어나는 경우 끝냄.
2-2. 가려는 방향의 배열 값이 이미 저장되어 있다면 방향을 바꾼다.
2-3. 만약 방향을 3번 바꾸고도 실패하면 끝냄.
2-4. 그것이 아니라면 배열에 값을 저장.
3.저장된 배열 값을 정답 배열에 저장.
4. 풀이하면서 고민했던 점
- 규칙을 찾기가 어려웠음 배열에 숫자를 직접 저장하는 것으로 구현함.
5. 문제를 풀고 알게된 개념 및 소감
-