기록 보관소

[프로그래머스] 코딩 기초 트레이닝 PART 25(C++)(完) 본문

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

[프로그래머스] 코딩 기초 트레이닝 PART 25(C++)(完)

JongHoon 2024. 3. 19. 23:12

프로그래머스 코딩 테스트 연습 : 코딩 기초 트레이닝(C++)

https://school.programmers.co.kr/learn/challenges?order=recent&languages=cpp&partIds=44139&page=7

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr


프로그래머스 코딩 기초 트레이닝 : 정수를 나선형으로 배치하기

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

 

프로그래머스

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

programmers.co.kr


문제 설명

양의 정수 n이 매개변수로 주어집니다.

n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ n ≤ 30

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(int n) {
    vector<vector<int>> answer(n, vector<int>(n, 1));
    int r1 = 0, r2 = n - 1, c1 = 0, c2 = n - 1;
    
    for (int i = 0; i < n * n;) {
        for (int j = c1; j <= c2; j++)
            answer[r1][j] += i++;
        
        r1++;
        
        for (int j = r1; j <= r2; j++)
            answer[j][c2] += i++;
        
        c2--;
        
        for (int j = c2; j >= c1; j--)
            answer[r2][j] += i++;
        
        r2--;
        
        for (int j = r2; j >= r1; j--)
            answer[j][c1] += i++;
        
        c1++;
    }
    
    return answer;
}

결과


프로그래머스 코딩 기초 트레이닝 : 특별한 이차원 배열 2

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

 

프로그래머스

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

programmers.co.kr


문제 설명

n × n 크기의 이차원 배열 arr이 매개변수로 주어질 때, arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요.

  • 0 ≤ i, j < n인 정수 i, j에 대하여 arr[i][j] = arr[j][i]

제한사항

  • 1 ≤ arr의 길이 = arr의 원소의 길이 ≤ 100
  • 1 ≤ arr의 원소의 원소 ≤ 1,000
  • 모든 arr의 원소의 길이는 같습니다.

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> arr) {
    for (int i = 0; i < arr.size(); i++)
        for (int j = 0; j < arr.size(); j++)
            if (arr[i][j] != arr[j][i])
                return 0;
    
    return 1;
}
// 다른 사람의 풀이 : 두번째 반복문 횟수를 줄이는 방법

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(vector<vector<int>> arr)
{
    int answer=0;

    for(int i=1; i<arr.size(); i++)
        for(int j=0; j<i; j++)
            if(arr[i][j]!=arr[j][i])
                return 0;

    return 1;
}

결과


프로그래머스 코딩 기초 트레이닝 : 정사각형으로 만들기

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

 

프로그래머스

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

programmers.co.kr


문제 설명

이차원 정수 배열 arr이 매개변수로 주어집니다.

arr의 행의 수가 더 많다면 열의 수가 행의 수와 같아지도록 각 행의 끝에 0을 추가하고, 열의 수가 더 많다면 행의 수가 열의 수와 같아지도록 각 열의 끝에 0을 추가한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ arr의 길이 ≤ 100
  • 1 ≤ arr의 원소의 길이 ≤ 100
    • arr의 모든 원소의 길이는 같습니다.
  • 1 ≤ arr의 원소의 원소 ≤ 1,000

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr) {
    if (arr.size() > arr[0].size()) {
        for (int i = 0; i < arr.size(); i++)
            for (int j = arr[i].size(); j < arr.size(); j++)
                arr[i].push_back(0);
    }
    else if (arr.size() < arr[0].size())
        for (int i = arr.size(); i < arr[0].size(); i++) {
            vector<int> temp(arr[0].size(), 0);
            arr.push_back(temp);
        }
        
    return arr;
}
// 다른 사람의 풀이 : max 함수와 이중 벡터를 생성해서 해결하는 방법

#include <cmath>
#include <vector>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr)
{
    vector<vector<int>> answer;

    int size=max(arr.size(), arr[0].size());
    vector<vector<int>> temp(size, vector<int>(size, 0));
    for(int i=0; i<arr.size(); i++)
        for(int j=0; j<arr[i].size(); j++)
            temp[i][j]=arr[i][j];
    answer=temp;

    return answer;
}

결과


프로그래머스 코딩 기초 트레이닝 : 이차원 배열 대각선 순회하기

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

 

프로그래머스

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

programmers.co.kr


문제 설명

2차원 정수 배열 board와 정수 k가 주어집니다.

i + j <= k를 만족하는 모든 (ij)에 대한 board[i][j]의 합을 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 1 ≤ board의 길이 ≤ 100
  • 1 ≤ board[i]의 길이 ≤ 100
    • 1 ≤ board[i][j] ≤ 10,000
    • 모든 board[i]의 길이는 같습니다.
  • 0 ≤ k < board의 길이 + board[i]의 길이

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> board, int k) {
    int answer = 0;
    
    for (int i = 0; i < board.size(); i++)
        for (int j = 0; j < board[0].size(); j++)
            if (i + j <= k)
                answer += board[i][j];
    
    return answer;
}

결과


여담

이렇게 코딩 기초 트레이닝의 모든 문제 풀이를 끝냈다.

마지막이라 그런지는 몰라도 첫 문제 '정수를 나선형으로 배치하기'는 이전 문제들과는 달리 조금 고민이 많이 필요한 문제였다. 그래도 천천히 하나 하나 써보면서 패턴을 찾아보고 정리해서 해결했다.

1레벨로 바로 넘어갈까 했지만, 0레벨에 PCCE 문제가 8개 있어서 이 문제를 모두 풀고나서 1레벨 문제 풀이를 할 계획이다.