๐Ÿ“ Coding Test Study/C++

[C++] ์†Œ์ˆ˜ ํŒ๋ณ„๋ฒ•, ์†Œ์ˆ˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฒ•

ibelieveinme 2023. 4. 22. 23:19
728x90

์†Œ์ˆ˜: 2๋ณด๋‹ค ํฌ๊ณ  ์ž๊ธฐ ์ž์‹  ์™ธ์— ์•ฝ์ˆ˜๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์ˆ˜


1. ์ž์—ฐ์ˆ˜ N์ด ์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฒ•

: 2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , ๋ฃจํŠธN๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ.

: ์‹œ๊ฐ„๋ณต์žก๋„ ๋ฃจํŠธN

 

* ์™œ ๋ฃจํŠธ N ๊นŒ์ง€?

์ž์—ฐ์ˆ˜ N์ด ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด N = a X b๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(a์™€ b๋Š” ์ž์—ฐ์ˆ˜์ด๊ณ  N์˜ ์•ฝ์ˆ˜ ์กฐํ•ฉ)

 

์ด ๋•Œ, a > b๋ผ๋ฉด ๋‘ ์ˆ˜์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ํ•ญ์ƒ a <= b๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‘ ์ˆ˜ a์™€ b์˜ ์ฐจ์ด๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฒฝ์šฐ๋Š” ๋ฃจํŠธ N์ผ ๋•Œ(์ œ๊ณฑ๊ทผ์ผ ๋•Œ) ์ด๋ฏ€๋กœ ๋ฃจํŠธN๊นŒ์ง€๋งŒ ๊ฒ€์‚ฌ๋ฅผ ํ•ด๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

โ€‹

24๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 24๋Š” ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ 24์˜ ์•ฝ์ˆ˜๋Š” 1,2,3,4,6,8,12,24๊ฐ€ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค. ์ด ๋•Œ, 24๋ฅผ ๋‘ ์ˆ˜์˜ ๊ณฑ์œผ๋กœ ํ‘œํ˜„ํ•ด๋ณด๋ฉด 1X24, 2X12, 3X8, 4X6์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ฆ‰, ํ”ํžˆ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•  ๋•Œ N/2๊นŒ์ง€ ๊ณ„์‚ฐํ•ด๋ณด๋Š”๋ฐ 1,2,3์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ ์ด๋ฏธ 24, 12, 8 ๋˜ํ•œ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ๋‘์ˆ˜์˜ ์ฐจ์ด๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฒฝ์šฐ์ธ ๋ฃจํŠธN๊นŒ์ง€๋งŒ ๊ฒ€์‚ฌ๋ฅผ ํ•ด๋ณด๋ฉด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.(๋ฃจํŠธ24 = 4.xxxx ์ด๋ฏ€๋กœ 4๊นŒ์ง€๋งŒ ๊ฒ€์‚ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.)

 

* ์ฝ”๋“œ

#include <iostream>
using namespace std;

bool prime(int n) {
	if (n > 2) {
		return false;
	}
	for (int i = 2; i*i<=n; i++) {
		if (n % i == 0) {
			return false;
		}
	}
    return true;
}

int main() {
	int n;
	cin >> n;
	bool result = prime(n);

	cout << result << endl;

	return 0;
}

 

2. N๊นŒ์ง€์˜ ์ˆ˜ ์ค‘์— ์†Œ์ˆ˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฒ•

: ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

: ์‹œ๊ฐ„๋ณต์žก๋„ O(N*log(logN))

 

* ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ž€ ?

2๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ชจ๋“  ์ˆ˜๋ฅผ ์จ๋†“๊ณ , 2๋ถ€ํ„ฐ ๊ทธ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ง€์šฐ๋ฉด์„œ ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ, ์•„์ง ์ง€์›Œ์ง€์ง€ ์•Š์€ ์ˆ˜๋Š” ์†Œ์ˆ˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์†Œ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ๋„ ์—ญ์‹œ ์œ„์—์„œ ๋ณธ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ฃจํŠธN๊นŒ์ง€๋งŒ ๋ฐ˜๋ณต์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, 1๋ถ€ํ„ฐ 100๊นŒ์ง€๋ผ๋ฉด 11X11์€ 121๋กœ 100์„ ๋„˜๊ธฐ ๋•Œ๋ฌธ์— ๋”์ด์ƒ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 10๊นŒ์ง€๋งŒ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ๊ตฌํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ํ›จ์”ฌ ์งง๊ฒ ์ฃ ~

 

* ์ฝ”๋“œ

#include <iostream>
using namespace std;

int main() {
	int prime[100]; //์†Œ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜
	int pn = 0; //์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜
	bool check[101] = { false, }; //์ง€์›Œ์กŒ์œผ๋ฉด true
	int n = 100; //100๊นŒ์ง€์˜ ์†Œ์ˆ˜

	for (int i = 2; i <= n; i++) {
		if (check[i] == false) {
			prime[pn++] = i;
			for (int j = i + i; j <= n; j += i) {
				check[j] = true;
			}
		}
	}
	for (int i = 0; i < pn; i++) {
		cout << prime[i] <<" ";
	}
	return 0;
}

๊ด€๋ จ ๋ฌธ์ œ

https://www.acmicpc.net/problem/1929

 

728x90