컴퓨터기본/문제풀이

[백준] 10870번, 10872번, 2798번

차가운오미자 2021. 6. 14. 22:08

 

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