๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Coding Test ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

Do it ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํ•˜๋ฃจ์ฝ”๋”ฉ 7์žฅ ์ •์ˆ˜๋ก  ๋ฌธ์ œ

by ๋น„์†Œ์•ผ 2022. 11. 20.
728x90

#18 ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ

M์ด์ƒ N์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ ์ค‘ ์†Œ์ˆ˜ ๋ชจ๋‘ ์ถœ๋ ฅ

์ตœ๋Œ€ ํฌ๊ธฐ 1,000,000์ด๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N^2)์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

๊ณผ์ •

1. ํฌ๊ธฐ๊ฐ€ N+1์ธ ๋ฐฐ์—ด ์ƒ์„ฑ, ๊ฐ ์š”์†Œ์— ์ธ๋ฑ์Šค ๋Œ€์ž… // ์ธ๋ฑ์Šค ์ˆœ์„œ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์‹ ๊ฒฝ ์•ˆ ์“ฐ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ

2. 1์€ ์†Œ์ˆ˜ X์ด๋ฏ€๋กœ ์‚ญ์ œ, 2๋ถ€ํ„ฐ N์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€ ํƒ์ƒ‰ํ•˜์—ฌ ๊ฐ’์ด ์ธ๋ฑ์Šค์™€ ์ผ์น˜ํ•˜๋ฉด ๊ทธ๋Œ€๋กœ ๋‘๊ณ 

// ์ฒ˜์Œ ์„ ํƒํ•œ ์ˆ˜๋Š” ์†Œ์ˆ˜๋กœ ์ธ์ •, ๊ทธ ๋ฐฐ์ˆ˜๋Š” ์‚ญ์ œ

3. ๋‚จ์•„ ์žˆ๋Š” ์ˆ˜ ๋ชจ๋‘ ์ถœ๋ ฅ // M์ด์ƒ N์ดํ•˜

 

*N์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋งŒ ํƒ์ƒ‰ํ•˜๋Š” ์ด์œ 

N์„ ๋‘ ์ˆ˜์˜ ๊ณฑ a*b๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๊ฐ ์ˆ˜์ธ a, b๋Š” ๋‘˜์ค‘ ํ•˜๋‚˜๋Š” N์˜ ์ œ๊ณฑ๊ทผ๋ณด๋‹ค ํด ์ˆ˜ ์—†๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ N์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋งŒ ํƒ์ƒ‰ํ•˜๋ฉด ์ „์ฒด ๋ฒ”์œ„์˜ ์†Œ์ˆ˜ ํƒ์ƒ‰ ๊ฐ€๋Šฅ

 

for(int i = 2; i <= Math.sqrt(N); i++) // N์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€ ๋ฐ˜๋ณต

if(A[i] == 0) continue; // ์ด๋ฏธ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ์ • ๋˜์—ˆ์œผ๋ฉด ๋„˜์–ด๊ฐ

 

for(int j = i+i; j<=N; j=j+i) { // ํ˜„์žฌ ์„ ํƒ๋œ ์ˆ˜์˜ ๋ฐฐ์ˆ˜ ์‚ญ์ œ, ์ธ๋ฑ์Šค ์ฃผ์˜

A[j] = 0;

 

for(int i =M; i<=N; i++) { // ๋ฒ”์œ„ M๋ถ€ํ„ฐ N๊นŒ์ง€

if(A[i] != 0) // ์†Œ์ˆ˜๋ผ๊ณ  ํŒ์ • ๋˜์—ˆ์œผ๋ฉด

System.out.println(A[i]);

}

 

#19 ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๊ธฐ

์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๋ž€? ๋‘ ์ˆ˜์˜ ๊ณต๋ฐฐ์ˆ˜ ์ค‘์—์„œ ์ตœ์†Ÿ๊ฐ’

 

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฒ• a*b/์ตœ๋Œ€๊ณต์•ฝ์ˆ˜

 

์ˆ˜ํ•™์ ์œผ๋กœ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฒ•

2 36 48

2 18 24

3 9 12

  3 4 // ์„œ๋กœ์†Œ๊ฐ€ ๋ ๋•Œ๊นŒ์ง€ ์†Œ์ˆ˜๋กœ ๋‚˜๋ˆ„๊ณ  ๋ชจ๋‘ ๊ณฑํ•œ๋‹ค.

2*2*3*3*4 == 144 // ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜

 

๋‘ ์ˆ˜์˜ ๊ณฑ์€ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜๊ฐ€ 1๋ฒˆ ์ค‘๋ณต ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‘ ์ˆ˜์˜ ๊ณฑ์—์„œ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜๋ฅผ ๋‚˜๋ˆ„์–ด ๋นผ์ฃผ๋ฉด ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๊ฐ€ ๋œ๋‹ค.

 

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์€ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

 

result = a*b / gcd(a,b);

 

gcd(a, b)

if(b==0)

return a;

else{

return gcd(b, a%b);

 

// ํ•ญ์ƒ ๋งจ ์•ž์— ํฐ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์ง€๋งŒ, ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ ๋–„๋ฌธ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ swap ๋œ๋‹ค.

728x90