본문 바로가기

Algorithm/Programers - C++

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

문제

 

풀이

#include <string>
#include <vector>
using namespace std;

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

    
    int num = left/(long long)n;
    for(long long i=left; i<=right; i++){
        if(i%n <= num) answer.push_back(num+1);
        else answer.push_back(i%n+1);
        
        if(i%n == n-1) num++;
    }
    return answer;
}

 

 


다른 사람 풀이

 

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> solution(int n, long long left, long long right) {
    vector<int> answer;
    int row;
    int column;
    for(long long i = left; i <= right; i++){
        answer.push_back(max(i / n, i % n) + 1);
    }

    return answer;
}

 

answer.push_back(max(i / n, i % n) + 1);

각각의 열에서 가장 작은 숫자는 left/n일 것이기 때문에 max를 사용하면 더 쉽게 해결할 수 있었다!

 

항상 불필요한 조건문을 많이 사용하는 것 같다.

 

 

 

 

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges