🎯 Algorithm/🕊️ programmers

[프로그래머스, C++] n^2 배열 자르기

넌낙타 2024. 2. 2. 01:05

시간초과 난 풀이

원인: n의 범위가 1~10^7이다.  그리고 left와 right의 범위는 0~n^2까지이다.

n이 10^7일 경우, left와 right는 정수범위를 넘는 수를 가질 수 있다.

따라서 int 자료형을 쓴다면 시간초과 혹은 오답처리가 난다.

따라서 int 자료형 대신 long long을 사용하여 left와, right를 다뤄야 한다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, long long left, long long right) {
    vector<int> answer;

    int number = 0;
    int row = 0;
    int col = 0;
    for(int i=left; i<=right; i++){
        row = i / n + 1;
        col = i % n + 1;
        number = row > col ? row : col;
        answer.push_back(number);
    }
    
    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++){
        long long row = i / n + 1;
        long long col = i % n + 1;
        answer.push_back( row > col ? row : col);
    }
    
    return answer;
}​