https://school.programmers.co.kr/learn/courses/30/lessons/181832
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
n*n의 배열에 숫자를 1부터 n까지 나선형으로 배치하면 된다.처음에 감이 너무 안 잡혀서 헷갈렸다.
구현 문제이고 조건과 범위만 명확히 작성하면 된다.
풀이 방법
나선형으로 이동시 입력 방향은 고정이다.
{오른쪽, 아래, 왼쪽, 위} 이 4방향을 반복적으로 사용하려면 모듈러 연산을 사용한다.
2차원 배열을 만들어 범위를 넘을 경우, 이미 배열에 숫자가 입력된 경우 방향을 변경한다.
모든 숫자가 입력될때까지 반복한다.
사실 2차원 백터에 직접 입력받을 수도 있다.
하지만, 방법을 몰랐던 나는 2차원 배열에 입력받고 옮겼다.
혹시 내 코드를 참고한다면 2차원 백터에 직접 입력받아보자..
풀이 코드
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int spiral_arr[30][30];
//오른쪽, 아래, 왼쪽, 위
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
int x, y, button, num=1;
vector<vector<int>> solution(int n) {
vector<vector<int>> answer(n);
spiral_arr[0][0] = num++;
while(1){
if(num > n*n) break;
int nx = x + dx[button%4];
int ny = y + dy[button%4];
if(ny>=n || nx>=n || ny < 0 || nx < 0 || spiral_arr[ny][nx] != 0) {
button++;
continue;
}
spiral_arr[ny][nx] = num++;
x = nx;
y = ny;
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
answer[i].push_back(spiral_arr[i][j]);
}
}
return answer;
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Lv.1 추억 점수 c++ (0) | 2025.01.01 |
---|---|
[프로그래머스] Lv.2 주차 요금 계산 c++ (0) | 2024.12.31 |
[프로그래머스] Lv.3 정수 삼각형 c++ (0) | 2024.12.30 |
[프로그래머스] Lv.2 하노이의 탑 c++ (0) | 2024.12.29 |
[프로그래머스] Lv.2 카펫 c++ (0) | 2024.12.27 |