[프로그래머스]N^2 배열 자르기

📒활용개념

  • 2차원 배열을 1차원 배열로 바꿨을 때 그 위치(index)가 어디일지 계산할 수 있어야 한다.
    정형화된 식을 알고있으면 쉬운 문제.
  • 문제의 조건에 맞는 행렬의 값을 구할 수 있어야 한다.

📌문제설명

다음 과정을 거쳐서 1차원 배열을 만들었을 때 arr[left] ~ arr[right]만 남기고 나머진ㄴ 지운다.

  • n행 n열 크기의 비어있는 2차원 배열을 만듭니다.
  • i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.
    - 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
  • 1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.

📌구현

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(int n, long long left, long long right) {
    vector<int> answer;
    
    for(long long int i=left; i<=right; i++){
        answer.push_back(max((i/n), (i%n))+1);		//1차원 행렬의 위치를 통해 2차원 행렬의 low, column의 값을 구할 수 있다.
    }
    
    return answer;
}

📌주의점

  • 1차원 행렬의 index를 통해 2차원 행렬의 index를 구할 수 있다.
    (index/n, index%n) - (n은 2차원 행렬의 행과 열의 크기)
  • 위의 조건의 경우 2차원 행렬의 값은 (max(low, column) + 1)이 된다는 것을 알아야 한다.

좋은 웹페이지 즐겨찾기