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

[프로그래머스] Lv.1 문제 PART 5(C++)

JongHoon 2024. 5. 7. 22:09

프로그래머스 코딩 테스트 : Lv.1 문제(C++)

https://school.programmers.co.kr/learn/challenges?order=acceptance_desc&page=1&languages=cpp&levels=1

 

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

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

school.programmers.co.kr


프로그래머스 Lv.1 문제 : 음양 더하기

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

 

프로그래머스

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

programmers.co.kr


문제 설명

어떤 정수들이 있습니다.

이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다.

실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.


제한사항

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> absolutes, vector<bool> signs) {
    int sum = 0;
    
    for (int i = 0; i < signs.size(); i++)
        sum += signs[i] ? absolutes[i] : 0 - absolutes[i];
    
    return sum;
}
// 다른 사람의 풀이 : 값에 1 또는 -1을 곱해서 해결하는 방법

#include <vector>
int solution(std::vector<int> absolutes, std::vector<bool> signs) {
    int answer = 0;
    for(int i = 0; i < signs.size(); i++)
        answer += absolutes[i] * (signs[i] ? 1 : -1);
    return answer;
}

결과


프로그래머스 Lv.1 문제 : 없는 숫자 더하기

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

 

프로그래머스

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

programmers.co.kr


문제 설명

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다.

numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ numbers의 길이 ≤ 9
    • 0 ≤ numbers의 모든 원소 ≤ 9
    • numbers의 모든 원소는 서로 다릅니다.

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> numbers) {
    int sum = 45;
    
    for (auto n : numbers)
        sum -= n;
    
    return sum;
}

결과


프로그래머스 Lv.1 문제 : 나누어 떨어지는 숫자 배열

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

 

프로그래머스

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

programmers.co.kr


문제 설명

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.

divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.


제한사항

  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> arr, int divisor) {
    vector<int> answer;
    
    for (auto n : arr)
        if (!(n % divisor))
            answer.push_back(n);
    
    if (answer.size())
        sort(answer.begin(), answer.end());
    else
        answer.push_back(-1);
    
    return answer;
}
// 다른 사람의 풀이 : 조금 더 간략하게 해결하는 방법

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> arr, int divisor) {
    vector<int> answer;
    sort(arr.begin(), arr.end());

    for (int i = 0; i < arr.size(); i++)
    {
        if (arr[i] % divisor == 0)
            answer.push_back(arr[i]);
    }

    return answer.empty() ? vector<int>(1, -1) : answer;
}

결과


여담

이번 문제들도 쉽게 쉽게 해결했다.

항상 느끼지만 조금 더 생각해봤으면 더 깔끔하게 해결할 수 있었을텐데 하는 아쉬운 생각이 든다.