본문 바로가기
Programming/CodingTest

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

by 기딩 2024. 3. 13.
728x90

문제 설명

 

 

아이디어

 

구현 코드

배열에 규칙이 보였기 때문에

n^2 만큼의 배열을 만들어서 일일이 한 행씩 추가하는 건 비효율적일 것 같다.

#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 r = i / n;            
        
        if (i >= r * n && i < r * (n+1))
            answer. push_back(r + 1);
        else
            answer.push_back(i + 1 - r*n);
    }
    return answer;
}

아이디어에서 말한 예외를 if문으로 처리

주의 ) row를 표현한 r을 int로 하면 x

 

신경쓰이는 점이 예외 개수가 r개여서 더 간단하게 할 수 있을 것 같고,

else에서 추가하는 값의 수식이 안 예쁘다

 

개선한 코드

#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;
        long long col = i % n;
        if (col < row)
            answer.push_back(row + 1);
        else
            answer.push_back(col + 1);
    }
    return answer;
}

 

행별로 열별로 규칙이 있는 것을 이용해서 정리했다.

마음에 든다

728x90