반응형
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문의 실행 횟수에는 영향을 주지 않는다.
끝
반응형
'c++ > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 커피 심부름(c++) (2) | 2024.02.01 |
---|---|
[프로그래머스] 0 떼기(c++) (0) | 2024.01.31 |
[프로그래머스] 코드 처리하기(c++) (2) | 2024.01.31 |
[프로그래머스] 접미사 배열(c++) (0) | 2024.01.28 |
[프로그래머스] 접미사인지 확인하기(c++) (2) | 2024.01.28 |