[프로그래머스] Lv.1 문제 PART 5(C++)
프로그래머스 코딩 테스트 : Lv.1 문제(C++)
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
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;
}
결과

여담
이번 문제들도 쉽게 쉽게 해결했다.
항상 느끼지만 조금 더 생각해봤으면 더 깔끔하게 해결할 수 있었을텐데 하는 아쉬운 생각이 든다.