일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 개인 프로젝트 - 런앤건
- 10월
- todolist
- 유니티
- 수학
- 5월
- 2025년
- 자료 구조
- 2024년
- 다이나믹 프로그래밍
- 2월
- C/C++
- 3월
- 골드메탈
- 2022년
- 유니티 심화과정
- c++
- 4월
- 1월
- 코딩 기초 트레이닝
- 개인 프로젝트
- 게임 엔진 공부
- 2023년
- 기초
- 단계별로 풀어보기
- 입문
- 코딩 테스트
- 백준
- 7월
- 프로그래머스
- Today
- Total
기록 보관소
[프로그래머스] Lv.1 문제 PART 18(C++) 본문
프로그래머스 코딩 테스트 : Lv.1 문제(C++)
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
프로그래머스 Lv.1 문제 : 과일 장수
https://school.programmers.co.kr/learn/courses/30/lessons/135808
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
과일 장수가 사과 상자를 포장하고 있습니다.
사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다.
사과 한 상자의 가격은 다음과 같이 결정됩니다.
- 한 상자에 사과를 m개씩 담아 포장합니다.
- 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다.
과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다)
예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.
- (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8
사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.
제한사항
- 3 ≤ k ≤ 9
- 3 ≤ m ≤ 10
- 7 ≤ score의 길이 ≤ 1,000,000
- 1 ≤ score[i] ≤ k
- 이익이 발생하지 않는 경우에는 0을 return 해주세요.
입출력 예
코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(int k, int m, vector<int> score) {
int answer = 0;
sort(score.begin(), score.end(), greater<>());
for (int i = 0; i < score.size() / m; i++) {
vector<int> v(score.begin() + i*m, score.begin() + (i+1) * m + 1);
answer += v[m - 1] * m;
}
return answer;
}
// 다른 사람의 풀이 : 우선순위 큐를 사용해서 해결하는 방법
#include <vector>
#include <queue>
using namespace std;
priority_queue<int> pq;
int solution(int k, int m, vector<int> score) {
int answer = 0;
for(int i=0; i<score.size(); i++)
pq.push(score[i]);
while(pq.size() >= m) {
for(int i=0; i<m-1; i++) pq.pop();
answer += pq.top() * m;
pq.pop();
}
return answer;
}
결과
프로그래머스 Lv.1 문제 : 소수 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/12977
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다.
숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
입출력 예
코드
#include <vector>
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int num) {
for (int i = 2; i <= sqrt(num); i++)
if (num % i == 0)
return false;
return true;
}
int solution(vector<int> nums) {
int answer = 0;
for(int i = 0; i < nums.size() - 2; i++)
for (int j = i + 1; j < nums.size() - 1; j++)
for (int h = j + 1; h < nums.size(); h++)
if (isPrime(nums[i] + nums[j] + nums[h]))
answer++;
return answer;
}
결과
프로그래머스 Lv.1 문제 : 소수 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/12921
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
제한사항
- n은 2이상 1000000이하의 자연수입니다.
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
vector<bool> check(n + 1, true);
for (int i = 2; i <= n; i++)
if (check[i]) {
answer++;
for (int j = i*2; j <= n; j+= i)
check[j] = false;
}
return answer;
}
결과
여담
마지막 문제 '소수 찾기'는 에로토스테네스의 체 알고리즘으로 해결했다.
결과에서 효율성 검사까지 하는 것을 보면 사실상 문제가 해당 알고리즘으로 풀이하는 것을 의도한 것으로 보인다.
풀이할 때 아래의 블로그 글을 참고했다.
[알고리즘] 소수판별 알고리즘 C++
0.목차 소수의 개념 소수판별1 (시간복잡도 O(N) 알고리즘) 소수판별2 (시간복잡도 O(√N) 알고리즘) 소수판별3 (시간복잡도 O(Nlog(logN)) 에라토스테네스의 체 알고리즘) 1. 소수(Prime Number) 의 개념 소
khu98.tistory.com
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.1 문제 PART 20(C++) (0) | 2024.06.27 |
---|---|
[프로그래머스] Lv.1 문제 PART 19(C++) (0) | 2024.06.25 |
[프로그래머스] Lv.1 문제 PART 17(C++) (0) | 2024.06.17 |
[프로그래머스] Lv.1 문제 PART 16(C++) (0) | 2024.06.13 |
[프로그래머스] Lv.1 문제 PART 15(C++) (2) | 2024.06.12 |