2차원 배열을 만든 뒤 이를 늘어트려 해단하는 범위의 숫자를 뽑는 문제다. 오로지 이미지만 보고 코드를 짠다면 분명 틀린다. 왜냐면 내가 그렇게 해서 틀렸기 때문. 행과 열의 숫자 중 제일 큰 게 배열의 요소로 들어간다는 것을 이용해야 하는 문제였다.
틀린 풀이.
for(int i=n-1; i>=0; i--){
for(int j=n-1; j>=0; j--){
arr[i][j] = 0;
}
}
for(int k=n-1; k>=0; k--){
for(int i=n-1; i>=0; i--){
for(int j=n-1; j>=0; j--){
if(arr[i][j] == 0){
if(num == j || num == i){
arr[i][j] = num+1;
}
}else{
continue;
}
}
}
num--;
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
arr2[num2] = arr[i][j];
num2++;
}
}
for(int i=left; i<=right; i++){
answer.push_back(arr2[i]);
}
return answer;
}
정답 벡터의 크기는 right - left + 1이다. 그 크기만큼 돌려줘야 하는데, 행은 left/n을 열은 right%n으로 구한 뒤 둘 중 큰 것을 answer에 넣어주면 된다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n, long long left, long long right) {
int num = right - left + 1;
vector<int> answer(num);
for (int i = 0; i < num; i++, left++) {
int row = left / n;
int col = left % n;
answer[i] = (row < col ? col : row) + 1;
}
return answer;
}