코딩테스트/프로그래머스

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

쪼르뚜 2024. 7. 25. 15:38
728x90
반응형


🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/87390

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


728x90

👩‍💻 코드

#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++) {
        int row = i / n;
        int col = i % n;
        
        answer.push_back(max(row, col) + 1);
    }
    
    return answer;
}

📝 풀이

1차원 배열을 채우고자 하는 원리만 이해하면 쉽게 풀 수 있다.

 

배열을 채우는 순서에 1을 더하여 작성하면 하늘색 행렬과 같이 나타낼 수 있다.

다음 행으로 넘어갈 때는 1씩 증가하고 다음 열로 넘어갈 때는 n만큼 증가하는 걸 볼 수 있다.

따라서 i를 n으로 나눌 때 몫은 행, 나머지는 열이 된다.

 

우리가 채우고자 하는 배열은 분홍색 행렬처럼 나타냈다.

2열 2행까지라는 의미는 2행 1열, 2행 2열, 1행 2열로 총 3칸이다.

행과 열 중 하나라도 2를 넘어서면 그건 3열 3행까지로 3으로 채워져야 한다.

즉, 행과 열 중 큰 값을 기준으로 숫자가 채워져야 한다는 것이다.

 

따라서 행과 열 중 큰 값을 기준으로 1을 더하고 배열에 추가한다.

주의 할 점은 처음부터 끝까지 모든 배열을 채울 필요가 없다.

필요한 부분만 채울 수 있도록 left와 right를 기준으로 반복문을 구현해야 한다.

반복문이 끝나면 문제에서 요하는 1차원 배열인 answer을 return 하면 된다.

728x90
반응형