C++/코딩 기초 트레이닝

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

서니션 2023. 12. 18. 15:01
728x90
반응형

문제설명

양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.

 


제한사항

  • 1 ≤ n ≤ 30

입출력 예


작성코드

#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(int n) {
    vector<vector<int>> answer(n, vector<int>(n,0));
    
    // i는 행 인덱스, j는 열 인덱스, k 는 각 배열에 채워줄 숫자, sw는 방향이 바뀔 시 사용될 스위치 변수, p는 몇 번을 반복해야 하는지를 알려주는 '반복 인덱스'
    int i=0, j=-1, k=0, sw=1, p=n;
    
    // 조건이 참일 때까지 반복하기 위해, while문을 사용
    while(true)
    {
        // 열 인덱스 j
        for(int l=0; l<p; l++)
        {
            k=k+1;
            j=j+sw;
            answer[i][j] = k;
        }
        p=p-1; // 열에서 1칸을 채웠으니 p-1
        if(p<=0) break;
        
        // 행 인덱스 i
        for(int m=0; m<p; m++)
        {
            k=k+1;
            i=i+sw;
            answer[i][j]=k;
        }
        // 열 인덱스인 j를 1씩 감소시켜야해서 스위치 변수를 -1로 바꾸어줌 (방향을 바꿈)
        sw*=-1;
    }
    
    for(int q=0; q<n; q++)
    {
        for(int r=0; r<n; r++)
        {
            answer[q][r];
        }
    }
    
    return answer;
}

문제 URL

https://school.programmers.co.kr/learn/courses/30/lessons/181832

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


반응형
728x90

 

728x90
반응형