2798번
다른 방법이 없을까 고민했지만 그냥 bruteforce로 모든 경우의 수 따지는 것이었음
#include <iostream>
#include <string>
#include <sstream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m; // 숫자의 갯수, 그리고 목표 숫자
string nums; // 스트링 받을 변수
vector<int> v; // 받은 카드의 숫자들 정리할 벡터
cin >> n >> m;
cin.ignore();
getline(cin, nums);
stringstream ss(nums); // stringstream으로 받아서 ' '별로 파싱하기 편하게
int str;
while (ss >> str) { // 스트림에서 str에 받아서 v에 저장
v.push_back(str);
}
int sum = 0;
int difference = m;
// brute-force방식
/* 모든 세 개의 수를 뽑는 경우의 수를 다 고려해서
* m과의 차이가 가장 작을 때, 그 차이값을 저장 */
for (int i = 0; i < v.size()-2; i++) {
for (int j = i + 1; j < v.size()-1; j++) {
for (int k = j + 1; k < v.size(); k++) {
sum = v[i] + v[j] + v[k];
if (m - sum < difference && m-sum>=0) {
// 차이가 0 미만이 되는 건 버려야 함
difference = m - sum;
}
}
}
}
// 어차피 답안은 합만 구하면 되니까 m에서 최소차를 뺌
cout << m - difference << endl;
}
10870번
피보나치 수 구하는 것 -> 재귀함수 이용하면 됨
초기값인 0과 1만 주의하면 됨!
#include <iostream>
using namespace std;
int pibonacci(int num) {
if (num == 0) {
return 0;
}
if (num == 1) {
return 1;
}
else {
return pibonacci(num - 1) + pibonacci(num - 2);
}
}
int main10870() {
int num;
cin >> num;
cout << pibonacci(num);
return 0;
}
10872번
역시 재귀함수의 대표적인 문제인 팩토리얼 구현 문제임
0일 때 답이 1인 것만 주의하면 됨
#include <iostream>
using namespace std;
int factorial(int num) {
if (num==1){
return num;
}
return num * factorial(num - 1);
}
int main10872() {
int num;
cin >> num;
if (num == 0) {
cout << 1 << endl;
}
else {
cout << factorial(num) << endl;
}
return 0;
}
'컴퓨터기본 > 문제풀이' 카테고리의 다른 글
[백준] 10773번, 1260번 (0) | 2021.06.20 |
---|---|
[백준] 2231번, 7568번 (0) | 2021.06.19 |
[이것이~] 15. 구현 (0) | 2021.06.14 |
[백준] 10828번, 1991번 (0) | 2021.06.14 |
[이것이~] 탐욕법, 구현 (0) | 2021.06.14 |