πŸ“ Coding Test Study/Algorithm Problem

[Baekjoon][C++] 9095번 1, 2, 3 λ”ν•˜κΈ° λ¬Έμ œμ„€λͺ… 및 μ½”λ“œ

ibelieveinme 2021. 3. 7. 02:33
728x90

β–· λ¬Έμ œμ„€λͺ…

 

9095번: 1, 2, 3 λ”ν•˜κΈ°

각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ§ˆλ‹€, n을 1, 2, 3의 ν•©μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ” λ°©λ²•μ˜ 수λ₯Ό 좜λ ₯ν•œλ‹€.

www.acmicpc.net

μ •μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, n을 1, 2, 3의 ν•©μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ” λ°©λ²•μ˜ 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 문제

이 λ•Œ, n의 λ²”μœ„λŠ” 1<=n<=10이닀.

 

β–· λ¬Έμ œν’€μ΄

N이 10보닀 μž‘κ±°λ‚˜ 같은 μ–‘μˆ˜μ΄κΈ° λ•Œλ¬Έμ— N은 μ΅œλŒ€ 10개 μ΄ν•˜μ˜ 1,2,3의 수둜 ν‘œν˜„μ΄ κ°€λŠ₯ν•˜λ‹€.

1+1+1+1+1+1+1+1+1+1 = 10

 

1) 10쀑 for문을 ν™œμš©ν•˜μ—¬ ν•œ μžλ¦¬μ— ν•˜λ‚˜μ”© 값을 λŒ€μž…ν•΄λ³΄λ©΄μ„œ n의 κ°’κ³Ό 같은지λ₯Ό ν™•μΈν•œλ‹€.

n의 κ°’κ³Ό κ°™λ‹€λ©΄ ν•΄λ‹Ή κ²½μš°λŠ” μ˜¬λ°”λ₯Έ 경우의 μˆ˜λ―€λ‘œ λ°©λ²•μ˜ 수λ₯Ό countν•œλ‹€.

2) μž¬κ·€ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ 인자둜 sum, goal 값을 보내고 λŒμ•„μ˜¬ λ•Œ(μž¬κ·€ν•¨μˆ˜ return)λ§ˆλ‹€ count ν•œλ‹€. 

 

β–· μ‹œκ°„λ³΅μž‘λ„

3κ°€μ§€ 경우의 수λ₯Ό 10번 λ”ν•˜λ©΄ λ˜λ―€λ‘œ O(3*10) = O(1)의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°–λŠ”λ‹€.

 

β–· μ •λ‹΅μ½”λ“œ

#include <iostream>
#include <vector>
using namespace std;

void Input();
int PresentSum(int T, int v);

int main() {
	Input();
	return 0;
}

void Input() {
	int T = 0;
	cin >> T;
	for (int t = 0; t < T; t++) {
		int num = 0;
		cin >> num;
		cout << PresentSum(T, num) << endl;
	}
}

int PresentSum(int T, int num) {
	for (int t = 0; t < T; t++) {
		int count = 0;
		for (int l1 = 1; l1 <= 3; l1++) {
			if (l1 == num) {
				count++;
			}
			for (int l2 = 1; l2 <= 3; l2++) {
				if (l1 + l2 == num) {
					count++;
				}
				for (int l3 = 1; l3 <= 3; l3++) {
					if (l1 + l2 + l3 == num) {
						count++;
					}
					for (int l4 = 1; l4 <= 3; l4++) {
						if (l1 + l2 + l3 + l4 == num) {
							count++;
						}
						for (int l5 = 1; l5 <= 3; l5++) {
							if (l1 + l2 + l3 + l4 + l5 == num) {
								count++;
							}
							for (int l6 = 1; l6 <= 3; l6++) {
								if (l1 + l2 + l3 + l4 + l5 + l6 == num) {
									count++;
								}
								for (int l7 = 1; l7 <= 3; l7++) {
									if (l1 + l2 + l3 + l4 + l5 + l6 + l7 == num) {
										count++;
									}
									for (int l8 = 1; l8 <= 3; l8++) {
										if (l1 + l2 + l3 + l4 + l5 + l6 + l7 + l8 == num) {
											count++;
										}
										for (int l9 = 1; l9 <= 3; l9++) {
											if (l1 + l2 + l3 + l4 + l5 + l6 + l7 + l8 + l9 == num) {
												count++;
											}
											for (int l10 = 1; l10 <= 3; l10++) {
												if (l1 + l2 + l3 + l4 + l5 + l6 + l7 + l8 + l9 + l10 == num) {
													count++;
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
		return count;
	}
}
#include <iostream>
using namespace std;

int PresentSum(int sum, int goal);

int main() {
	int T;
	cin >> T;
	while (T--) {
		int n;
		cin >> n;
		cout << go(0, n) << '\n';
	}
	return 0;
}

int PresentSum(int sum, int goal) {
	if (sum > goal) {
		return 0;
	}
	if (sum == goal) {
		return 1;
	}
	int count = 0;
	for (int i = 1; i <= 3; i++) {
		count += go(sum + i, goal);
	}
	return now;
}
728x90