본문 바로가기
c++/프로그래머스

[프로그래머스] 정사각형으로 만들기(c++)

by ilp 2024. 1. 31.
반응형

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

 

프로그래머스

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

programmers.co.kr



#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr) {
    int check;
    if(arr.size()>arr[0].size()){
        check=arr.size()-arr[0].size();
        for(int i=0;i<arr.size();i++){
            for(int j=0;j<check;j++){
               arr[i].push_back(0);
            }
        }
    }
    else if(arr.size()<arr[0].size()){
        check=arr[0].size()-arr.size();
        for(int i=0;i<check;i++){
            arr.push_back(vector<int>(arr[0].size(),0));
        }
    }
    
    return arr;
}

1. 변수

  • 'check': 추가해야할 행 또는 열의 수를 계산하기 위한 변수이다.

2. 행과 열의 길이 비교/ 처리

  • 행의 수가 열의 수보다 많을때 ( arr.size() > arr[0].size() )
    • 추가해야할 열의 수를 계산한다. ( check = arr.size() - arr[0].size(); )
    • 이중 for문을 사용하여 각 행의 끝에 0을 'check'만큼 추가한다.
  • 열의 수가 행의 수보다 많을때 ( arr.size() < arr[0].size() )
    • 추가해야할 행의 수를 계산한다. ( check = arr[0].size() - arr.size(); )
    • for문을 사용하여 'check' 만큼 새로운 행을 추가한다.
      이떄 각 행은 'arr[0].size()' 길이를 가지고 모든 요소가 0으로 초기화 된다.

3. 결과

  • 최종적으로 2차원 vector 'arr'을 반환한다.

 

 

참고

이번 문제는 2차원 vector을 사용해서 풀었다.
2차원 vector은 c++에서 자주 사용된다. 2차원 vector에 대해 알아본다.

 

먼저

arr[0].push_back(0);

 

 이렇게 하면 0이 'arr[i]'에 들어가게 된다.

 

arr(초기배열) result(실행후)
[[1,2,3],[2,3,5,6],[1]] [[1,2,3,0],[2,3,5,6],[1]]

이렇게 0이 추가로 들어간다.

 

다음으로

int n=2
arr.push_back(vector<int>(n,0));

이렇게 하면

 

arr(초기배열) result(실행후)
[[1,2,3],[2,3,5,6],[1]] [[1,2,3,],[2,3,5,6],[1],[0,0]]

이렇게 뒤에 vector이 하나 추가되는 느낌이다.

 

 

처음 문제를 풀때는 'check'변수 없이

바로 for문에 넣어서 풀었다.

for(int j = 0;j < arr.size() - arr[0].size();j++)
for(int i = 0;i < arr[0].size() - arr.size();i++)

이런식으로 넣어주었다.

 

그러나 배열의 크기가 변경될 때

for문의 실행 횟수가 변경될 수도 있다.

 

특히 'arr[0].size()''arr.size()'와 같은 조건을 for문에서 직접 사용하면

배열 크기가 변경될 때 for문이 예상치 못하게 동작할 수 있다..

 

나는 이를 방지하기위해, 배열의 초기 크기를 'check'와 같은 변수에 저장하고

이 변수를 for의 조건으로 사용했다.

이렇게 하면 중간의 배열의 크기가 변해도 for문의 실행 횟수에는 영향을 주지 않는다.


 

반응형