반응형
https://school.programmers.co.kr/learn/courses/30/lessons/181832
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
답
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> solution(int n) {
vector<vector<int>> answer(n,vector<int>(n,0));
int count=1;
int m=n;
int x=0,y=-1;
while (m>0) {
for (int i=0;i<m;i++) {
y+=1;
answer[x][y] = count++;
}
m--;
for (int i=0;i<m;i++) {
x+=1;
answer[x][y] = count++;
}
for (int i=0;i<m;i++) {
y-=1;
answer[x][y] = count++;
}
m--;
for (int i=0;i<m;i++) {
x-=1;
answer[x][y] = count++;
}
}
return answer;
}
n x n 크기의 2차원 벡터 answer를 0으로 초기화한다.
count는 배열의 들어가는 숫자를 나타내는 변수이다.
x와 y는 현재 위치를 나타내는 변수이다.
그 다은 while문을 사용한다.(m이 0보다 큰동안)
- 첫번째로 오른쪽 방향으로 이동하며 y의 값을 증가하고, 각 위치에 count값을 넣어주고 count를 증가해준다.
- 두번째로 아래쪽 방향으로 이동하며, x의 값을 증가하고, 각위치에 count를 넣어주고 count를 증가한다.
- 세번째로 왼쪽 방향으로 이동하며 x를 감소하고 각위치에 count값을 넣어주고 count를 증가한다.
- 네번째로 위쪽 방향으로 이동, x를 감소, 위치에 count넣고 count를 증가
마지막으로 answer을 반환한다.
이 함수는 주어진 크기 n에 대해 나선형으로 증가하는 숫자들을 2차원 배열 형태로 생성할 수 있다.
참고
문제에서 -1을 y의 초기값으로 설정했는데
첫번쨰 원소가 정확한 위치에 들어가게 하기 위해서이다.
첫번재 원소는 [0][0]인데 코드는 오른쪽 박향으로 처음 시작한다.
이떄 y를 0으로 초기화하면 첫이동에서 y가 1로 증가하고,
첫번째 원소가 [0][1]에 들어가게 된다.
그래서 y를 -1로 초기화 하였다.
끝
반응형
'c++ > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 공백으로 구분하기 2(c++) (0) | 2024.01.13 |
---|---|
[프로그래머스] 두 수의 합(c++) (0) | 2024.01.13 |
[프로그래머스] 그림 확대(c++) (0) | 2024.01.12 |
[프로그래머스] 문자열 정수의 합(c++) (0) | 2023.12.27 |
[프로그래머스] 문자열의 뒤의 n글자(c++) (2) | 2023.12.27 |