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