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;
}