기록 보관소

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

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

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

JongHoon 2024. 3. 18. 20:40

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

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

 

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

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

school.programmers.co.kr


프로그래머스 코딩 기초 트레이닝 : 커피 심부름

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

 

프로그래머스

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

programmers.co.kr


문제 설명

팀의 막내인 철수는 아메리카노와 카페 라테만 판매하는 카페에서 팀원들의 커피를 사려고 합니다.

아메리카노와 카페 라테의 가격은 차가운 것과 뜨거운 것 상관없이 각각 4500, 5000원입니다.

각 팀원에게 마실 메뉴를 적어달라고 하였고, 그 중에서 메뉴만 적은 팀원의 것은 차가운 것으로 통일하고 "아무거나"를 적은 팀원의 것은 차가운 아메리카노로 통일하기로 하였습니다.

각 직원이 적은 메뉴가 문자열 배열 order로 주어질 때, 카페에서 결제하게 될 금액을 return 하는 solution 함수를 작성해주세요.

order의 원소는 아래의 것들만 들어오고, 각각의 의미는 다음과 같습니다.


제한사항

  • 1 ≤ order의 길이 ≤ 1,000

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<string> orders) {
    int answer = 0;
    
    for (auto order : orders) {
        if (order.find("cafelatte") == string::npos)
            answer += 4500;
        else
            answer += 5000;
    } 
    
    return answer;
}

결과


프로그래머스 코딩 기초 트레이닝 : 그림 확대

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

 

프로그래머스

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

programmers.co.kr


문제 설명

직사각형 형태의 그림 파일이 있고, 이 그림 파일은 1 × 1 크기의 정사각형 크기의 픽셀로 이루어져 있습니다.

이 그림 파일을 나타낸 문자열 배열 picture과 정수 k가 매개변수로 주어질 때, 이 그림 파일을 가로 세로로 k배 늘린 그림 파일을 나타내도록 문자열 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ picture의 길이 ≤ 20
  • 1 ≤ picture의 원소의 길이 ≤ 20
  • 모든 picture의 원소의 길이는 같습니다.
  • picture의 원소는 '.'과 'x'로 이루어져 있습니다.
  • 1 ≤ k ≤ 10

입출력 예

입출력 예
입출력 예 #1 설명
입출력 예 #2 설명


코드

#include <string>
#include <vector>

using namespace std;

vector<string> solution(vector<string> picture, int k) {
    vector<string> answer;
    
    for (auto str : picture) {
        string temp = "";
        
        for (auto c : str)
            for (int i = 0; i < k; i++)
                temp +=c;
        
        for (int i = 0; i < k; i++)
            answer.push_back(temp);
    }
    
    return answer;
}
// 다른 사람의 풀이 : 문자열의 길이와 이중 배열을 이용해서 해결하는 방법

#include <string>
#include <vector>

using namespace std;

vector<string> solution(vector<string> picture, int k) {
    vector<string> answer;
    for(int i=0;i<k*picture.size();i++){
        string tmp;
        for(int j=0;j<k*picture[0].length();j++){
            tmp += picture[i/k][j/k];
        }
        answer.push_back(tmp);
    }
    return answer;
}

결과


프로그래머스 코딩 기초 트레이닝 : 조건에 맞게 수열 변환하기 3

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

 

프로그래머스

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

programmers.co.kr


문제 설명

정수 배열 arr와 자연수 k가 주어집니다.

만약 k가 홀수라면 arr의 모든 원소에 k를 곱하고, k가 짝수라면 arr의 모든 원소에 k를 더합니다.

이러한 변환을 마친 후의 arr를 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 1 ≤ arr의 길이 ≤ 1,000,000
    • 1 ≤ arr의 원소의 값 ≤ 100
  • 1 ≤ k ≤ 100

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> arr, int k) {
    for (auto &n : arr) {
        if (k % 2 == 0)
            n += k;
        else
            n *= k;
    }
    
    return arr;
}
// 다른 사람의 풀이 1 : 삼항연산자를 사용하는 방법

#include <string>
#include <vector>

using namespace std;

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

    for(int i=0; i<arr.size(); i++)
        k%2==1 ? arr[i]*=k : arr[i]+=k;
    answer=arr;

    return answer;
}
// 다른 사람의 풀이 2 : transform 함수를 사용하는 방법

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

vector<int> solution(vector<int> v, int k) {
    transform(v.begin(),v.end(),v.begin(),[k](int x){return k&1?x*k:x+k;});
    return v;
}

결과


프로그래머스 코딩 기초 트레이닝 : l로 만들기

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

 

프로그래머스

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

programmers.co.kr


문제 설명

알파벳 소문자로 이루어진 문자열 myString이 주어집니다.

알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 1 ≤ myString ≤ 100,000
    • myString은 알파벳 소문자로 이루어진 문자열입니다.

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

string solution(string myString) {
    for (auto &c : myString)
        if (c < 'l')
            c = 'l';
    
    return myString;
}
// 다른 사람의 풀이 1 : 삼항연산자를 사용하는 방법

#include <string>
#include <vector>

using namespace std;

string solution(string myString) {

    for(auto& v : myString)
    {
        v = (v <= 'l')?'l':v;
    }

    return myString;
}
// 다른 사람의 풀이 2 : transform 함수를 사용하는 방법

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

string solution(string myString) {
    transform(myString.cbegin(), myString.cend(), myString.begin(), [](char c){ return c < 'l' ? 'l' : c;});
    return myString;
}

결과


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

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

 

프로그래머스

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

programmers.co.kr


문제 설명

정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.

  • arr[i][j] (0 ≤ i, j < n)의 값은 i = j라면 1, 아니라면 0입니다.

제한사항

  • 1 ≤ n ≤ 100

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(int n) {
    vector<vector<int>> answer(n, vector<int>(n, 0));
    
    for (int i = 0; i < n; i++)
        answer[i][i] = 1;
    
    return answer;
}

결과


여담

하면서 느끼지만 항상 문제 풀이 자체보다는 좀 더 간결하거나 함수 하나로 쉽게 표현할 수 있는 방법에 대해서 고민을 많이 해야하는것 같다.