본문 바로가기
c++/프로그래머스

[프로그래머스] 정수를 나선형으로 배치하기(c++)

by ilp 2024. 1. 13.
반응형

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로 초기화 하였다.

 

반응형