C++:: 프로그래머스 < n^2 배열 자르기 >

jahlee·2023년 5월 23일
0

프로그래머스_Lv.2

목록 보기
50/106
post-thumbnail

n의 범위가 10^7까지 여서 직접 2차원 배열을 만들어 잘라붙이는 방식으로 구현한다면 시간초과가 발생한다. 때문에 범위 내에서 조건에 맞추어 값을 넣어주면 되는 문제이다.

#include <string>
#include <vector>
using namespace std;

vector<int> solution(int n, long long left, long long right)
{
    vector<int> answer;
    int start_x, start_y;//시작 2차원배열 인덱스

    start_x = left/n; start_y = left%n;
    for(int i=0;i<right-left+1;i++)
    {
        answer.push_back(max(start_x+1, start_y+1));
        if (++start_y/n)
        {//열이 넘어간다면 행++
            start_x++;
            start_y=0;
        }
    }

    return answer;
}

위 풀이를 좀더 간결하게 하면 다음과 같다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, long long left, long long right)
{
    vector<int> answer;
    for(long long i = left; i <= right; i++)
        answer.push_back(max(i / n, i % n) + 1);
    return answer;
}

0개의 댓글