n^2 배열 자르기

NJW·2022년 3월 19일
0

코테

목록 보기
17/170

들어가는 말

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;
}
profile
https://jiwonna52.tistory.com/

0개의 댓글