안녕하세요. 오늘은 프로그래머스 예산, 두 개 뽑아서 더하기, 2016년 문제를 풀어보았습니다!
문제 난이도가 낮아서 3문제를 한번에 포스팅하려고 합니다!
1. 예산
예산문제는 간단한 sort 문제입니다.
vector d를 sort후 for문을 돌면서 예산에서 vector d의 값을 예산에서 깍아나가면서 result값을 늘려주면 됩니다!
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> d, int budget) {
int answer = 0;
sort(d.begin(), d.end());
int size = d.size();
for (int i = 0; i < size; i++) {
if(budget >= d[i]) {
answer++;
budget-=d[i];
}
}
return answer;
}
2. 두 개 뽑아서 더하기
두 개 뽑아서 더하기문제는 간단한 조합(순열과 조합)문제입니다!
그래서 2중 for문으로 문제를 쉽게 해결할 수 있습니다!
그리고 중복같은 경우는 저는 보통 result가 int형이라면 배열의 인덱스를 이용하는 편입니다.
배열의 인덱스가 값이고 값이 true, false형태로 정해두는 방식이죠!
이런 방식이면 중복도 해결할 수 있고 탐색도 매우 빨라서 속도 문제도 이상없습니다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> numbers) {
vector<int> answer;
int result[200] = {0,};
int size = numbers.size();
for (int i = 0; i < size; i++) {
for (int j = i+1; j < size; j++) {
result[numbers[i]+numbers[j]] = 1;
}
}
for (int i = 0; i <= 200; i++) {
if (result[i] == 1) answer.push_back(i);
}
return answer;
}
3. 2016년
2016년 문제는 흔한 날짜 계산문제인데요!
우선 날짜 table을 global에 선언 및 초기화를 해둡니다.
그리고 날짜를 달과 일로 계산할 수 있는데요.
이 또한 월별 table을 만들어 두어도 상관없지만, 저는 더 간단하게 if문으로 월별 차이로 일별차이로 미리 계산해둔 값을 더해 나가는 방식을 사용했습니다.
그리고 날짜 계산이후에는 모듈로 연산자를 이용하여 날짜 테이블에 맵핑시켜줬습니다.
#include <string>
#include <vector>
using namespace std;
string day[7] = {"FRI","SAT","SUN","MON","TUE","WED","THU"};
int calcDay(int month, int day){
int differenceMonth, differenceDay, differenceResult;
differenceMonth = month - 1;
differenceDay = day - 1;
if(differenceMonth == 0){
differenceResult = differenceDay;
}
if(differenceMonth == 1){
differenceResult = 31+differenceDay;
}
if(differenceMonth == 2){
differenceResult = 60+differenceDay;
}
if(differenceMonth == 3){
differenceResult = 91+differenceDay;
}
if(differenceMonth == 4){
differenceResult = 121+differenceDay;
}
if(differenceMonth == 5){
differenceResult = 152+differenceDay;
}
if(differenceMonth == 6){
differenceResult = 182+differenceDay;
}
if(differenceMonth == 7){
differenceResult = 213+differenceDay;
}
if(differenceMonth == 8){
differenceResult = 244+differenceDay;
}
if(differenceMonth == 9){
differenceResult = 274+differenceDay;
}
if(differenceMonth == 10){
differenceResult = 305+differenceDay;
}
if(differenceMonth == 11){
differenceResult = 335+differenceDay;
}
return differenceResult;
}
string solution(int a, int b) {
string answer = "";
int result = calcDay(a,b);
answer = day[result%7];
return answer;
}
오늘은 이렇게 3문제를 풀어보았는데요.
3문제 모두 난이도가 낮아서 금방 풀 수 있으니 다들 도전해 보시기 바랍니다.
감사합니다~ 좋은 하루 되세요!
'Algorithm Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] [1차] 비밀지도, 가운데 글자 가져오기 with Swift (0) | 2021.12.04 |
---|---|
[프로그래머스] 최소직사각형, 나머지가 1이 되는 수 찾기, 부족한 금액 계산하기 with Swift (0) | 2021.12.03 |
[프로그래머스] 약수의 개수와 덧셈, 3진법 뒤집기 (0) | 2021.12.01 |
[프로그래머스] 폰켓몬, 실패율 (0) | 2021.11.30 |
[프로그래머스] 코딩테스트 연습 탐욕법(Greedy) 체육복 (0) | 2021.11.29 |