1 분 소요

Question

Q Q2 Q3 Q4


Solution

  • 2차원 배열을 1차원으로 변환한다. 이를 위해 이중for 루프를 하거나, 모든 1차원 배열을 만들고자 하면 시간 초과가 난다.
  • 주어진 left와 right를 가지고 해당 필요 범위만 뽑아내야 한다.
  • 2차원 배열에서의 idx는 1차원 배열 에서의 idx와 이러한 관계를 가진다.
    1차원 idx = row * n + column
    row = i/n, column = i%n
  • 그리고 해당 idx의 값은 ‘1차원의 값 = row와 column 중 가장 큰 것의 + 1’ 와 같은 관계가 성립 된다.

Cord

#include <string>
#include <vector>

using namespace std;

// 2차원을 1차원으로 변환
// 1차원 idx = row * n + column
// 1차원의 값 = row와 column 중 가장 큰 것의 + 1
// row = i/n, column = i%n
vector<int> solution(int n, long long left, long long right) 
{
    vector<int> answer;
    
    // left와 right 사이의 값을 answer에 push
    for (long long i = left; i <= right; ++i)
    {
        int row = i/n;
        int column = i%n;
        int bigger = 0;
        
        if (row >= column)
        {
            bigger = i/n + 1;
        }
        else
        {
            bigger = i%n + 1;
        }
        
        answer.push_back(bigger);
    }
    
    return answer;
}

/*
1차원   2차원     값    [i/n][i%n]
0 1 2  00 01 02  1 2 3  00 01 02
3 4 5  10 11 12  2 2 3  10 11 12
6 7 8  20 21 22  3 3 3  20 21 22
*/

Result

Result