[๋ฐฑ์ค€] 1920๋ฒˆ : ์ˆ˜ ์ฐพ๊ธฐ - JAVA [์ž๋ฐ”] ์ด๋ถ„ ํƒ์ƒ‰ ๋ฌธ์ œ

2021. 10. 25. 16:23ยทAlgorithm/BaekJoon

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

 

1920๋ฒˆ: ์ˆ˜ ์ฐพ๊ธฐ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” N๊ฐœ์˜ ์ •์ˆ˜ A[1], A[2], …, A[N]์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” M(1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” M๊ฐœ์˜ ์ˆ˜๋“ค์ด ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ด ์ˆ˜๋“ค

www.acmicpc.net

 

 

 

 

 

 

 

 





  • ๋ฌธ์ œ

 

 

 

 

 

 

 

 

์ƒˆ ์นดํ…Œ๊ณ ๋ฆฌ์ธ ์ด๋ถ„ ํƒ์ƒ‰์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ์ธ ์ˆ˜ ์ฐพ๊ธฐ๋‹ค.

 

 

 

 

 

 

 

 

 

 





  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ [์ ‘๊ทผ ๋ฐฉ๋ฒ•]

 



 

 

 

์ผ๋‹จ, ํ’€์ด ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ธฐ ์ „์— ์ด๋ถ„ ํƒ์ƒ‰(Binary Search)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

์ด ์ „ ๋ฌธ์ œ๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ๋ถ„ํ•  ์ •๋ณต์„ ์‚ดํŽด๋ณด์•˜๋‹ค. ๋ถ„ํ•  ์ •๋ณต ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๋‘˜ ์ด์ƒ์œผ๋กœ ๋‚˜๋ˆ„๋ฉด์„œ ๋‚˜๋ˆ ์ง„ ๋ถ€๋ถ„๋ฌธ์ œ์— ๋Œ€ํ•ด ํ’€๋ ธ๋‹ค๋ฉด ํ•ด๋‹น ๋ถ€๋ถ„์€ ๋๋‚ด๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ถ€๋ถ„๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ๋‚˜๋ˆ„์–ด ์œ„ ๊ณผ์ •์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ฐ˜๋ณตํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

 

์˜ˆ๋กœ๋“ค์–ด ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ ๋ฌธ์ œ๋‚˜, ์ฟผ๋“œ ํŠธ๋ฆฌ ๊ฐ™์€ ๋ฌธ์ œ์ฒ˜๋Ÿผ ์ด๋ฏธ์ง€๋ฅผ 4๋“ฑ๋ถ„์œผ๋กœ ๋ถ„ํ• ํ•ด๋‚˜๊ฐ€๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜๋„ ์žˆ๊ณ , ๊ณฑ์…ˆ ๋ฌธ์ œ๋‚˜ ํ–‰๋ ฌ ๊ณฑ์…ˆ ๋ฌธ์ œ์ฒ˜๋Ÿผ ์–ด๋–ค ์ˆ˜ํ•™์  ๋ฒ•์น™์„ ์ด์šฉํ•˜์—ฌ ๋ถ€๋ถ„๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•ด๋‚˜๊ฐ€๋ฉฐ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ „์ฒด์— ๋Œ€ํ•œ ๋‹ต์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์ด๋ถ„ ํƒ์ƒ‰์€ ๊ทธ๋Ÿผ ๋ฌด์—‡์ผ๊นŒ?

 

๋‹จ์–ด ๊ทธ๋Œ€๋กœ ํ•ด์„ํ•ด๋ณด๋ฉด ์ด๋ ‡๋‹ค. '์ด๋ถ„'์€ ํ•œ์ž๋กœ ๋ณด๋ฉด ไบŒๅˆ† ์œผ๋กœ ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆˆ๋‹ค๋Š” ์˜๋ฏธ๊ณ , 'ํƒ์ƒ‰'์€ ๋ง ๊ทธ๋Œ€๋กœ ์–ด๋–ค ๊ฒƒ์„ ์ฐพ๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์ข€ ๋” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งํ•˜์ž๋ฉด ๋‘ ๋ถ€๋ถ„์œผ๋กœ ์ชผ๊ฐœ๋ฉด์„œ ํƒ์ƒ‰ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๊ฐ€ ์žˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ 'ํƒ์ƒ‰' ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

๋ถ„ํ• ์ •๋ณต์€ ์–ด๋–ค ์ „์ฒด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€๋ถ„์ ์œผ๋กœ ๋‚˜๋ˆ ๋“ค์–ด๊ฐ€๋ฉด์„œ ๋ถ„ํ• ํ•˜์—ฌ ๋ถ€๋ถ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๋ฉด, ์ด๋ถ„ํƒ์ƒ‰์€ ์œ„ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋“ค์–ด๊ฐ€๊ธด ํ•˜์ง€๋งŒ, ํŠน์ • ๊ฐ’ ๋˜๋Š” ์ž๋ฃŒ๋ฅผ ์ฐพ๋Š” 'ํƒ์ƒ‰'์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

์ฐธ๊ณ ๋กœ ์ด๋ถ„ ํƒ์ƒ‰์„ ์ด์ง„ ํƒ์ƒ‰์ด๋ผ๊ณ ๋„ ํ•˜๋Š”๋ฐ ๋‚˜๋ˆŒ ๋ถ„(ๅˆ†) ๋Œ€์‹  ๋‚˜์•„๊ฐˆ ์ง„(้€ฒ)์ด๋ผ ๋‘ ๋‹จ์–ด ๋ชจ๋‘ ์˜๋ฏธ์ƒ ํฐ ์ฐจ์ด๋Š” ์—†๋‹ค.

binary ๋ผ๋Š” ๋‹จ์–ด ์ž์ฒด๊ฐ€ ๊ณตํ•™์ ์œผ๋กœ๋Š” 0๊ณผ 1์„ ์˜๋ฏธํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, ๋‘ ๋ถ€๋ถ„ ์ด๋ผ๋Š” ์˜๋ฏธ๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ถ„ ํƒ์ƒ‰, ์ด์ง„ ํƒ์ƒ‰ ๋ชจ๋‘ ๋งž๋Š” ๋ง์ด๋‹ค.

 

 

์•„์ง๊นŒ์ง€๋Š” ์ด๋ถ„ ํƒ์ƒ‰์ด๋ผ๋Š” ๊ฒƒ์ด ์ž˜ ๊ฐ์ด ์•ˆ ์˜ฌ ๊ฒƒ์ด๋‹ค.

 

๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‹œ๋กœ Up & Down ๊ฒŒ์ž„์„ ๋– ์˜ฌ๋ฆฌ๋ฉด ๋œ๋‹ค.

1 ~ 100 ๊นŒ์ง€ ์ˆ˜ ์ค‘ ์ƒ๋Œ€ ๋ฐฉ์ด 17๋กœ ์ •ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์šฐ๋ฆฌ๋Š” ์ˆ˜๋ฅผ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๋ณดํ†ต ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š”๊ฐ€?

100์˜ ์ ˆ๋ฐ˜์ธ 50์ผ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ƒ๋Œ€๊ฐ€ ๋‹ค์šด(down)์ด๋ผ ํ•˜๋ฉด, ๊ทธ ๋‹ค์Œ์œผ๋กœ ์ ˆ๋ฐ˜์ธ 25์ธ์ง€๋ฅผ ๋ฌผ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ ๋Š” 12, ๊ทธ ๋‹ค์Œ์œผ๋กœ๋Š” 12์™€ 24์˜ ์ค‘๊ฐ„์ธ 18... ์ด๋Ÿฐ์‹์œผ๋กœ, ์ฆ‰ 50 → 25 → 12 → 18 .. ์ด๋ ‡๊ฒŒ ๋ฐ˜์œผ๋กœ ์ชผ๊ฐœ๊ฐ€๋ฉด์„œ ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋Ÿฐ ์‹์œผ๋กœ ๊ตฌ๊ฐ„ ๋‚ด ์ ˆ๋ฐ˜์„ ์ž˜๋ผ๊ฐ€๋ฉด์„œ ๊ฐ’์„ ์ฐพ์•„๋‚˜๊ฐ€๋Š”๊ฒŒ ๊ธฐ๋ณธ์ ์ธ ์ด๋ถ„ ํƒ์ƒ‰ ์›๋ฆฌ๋‹ค.

 

์ด ๋ฌธ์ œ์—์„œ์˜ ํฌ์ธํŠธ๋Š” '์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€'๋งŒ ์•Œ์•„๋‚ด๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต ์›์†Œ์— ๋Œ€ํ•œ ๊ณ ๋ ค๋Š” ํ•˜์ง€ ์•Š๊ณ  ๊ตฌํ˜„์„ ํ•˜๊ฒ ๋‹ค. (์ค‘๋ณต์›์†Œ๊ฐ€ ์žˆ์„ ๋•Œ ํฌ๊ฒŒ ๊ฐ€์žฅ ์™ผ์ชฝ์˜ ์›์†Œ์˜ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์›์†Œ์˜ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋‹ค์Œ ๋ฌธ์ œ์—์„œ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.)

 

 

 

์ด ๋ฒˆ ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด ๊ฒฐ๊ตญ ์ฒ˜์Œ ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง€๊ณ  ๊ทธ ๋‹ค์Œ์— ๊ฐ ๊ฐ’์ด ์ฒ˜์Œ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์— ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ๋ฌป๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ์ž„์˜์˜ ๋ฐฐ์—ด์ด ์ฃผ์–ด์งˆ ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ key๋ผ๊ณ  ํ•˜๊ณ  ์ด๋ถ„ ํƒ์ƒ‰์€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š”์ง€ ํ•œ ๋ฒˆ ๋ณด์ž.

 

 

์šฐ๋ฆฌ๊ฐ€ ๋งŒ์•ฝ ์ฐพ์œผ๋ ค๋Š” ๊ฐ’(key)๊ฐ€ 7์ด๋ผ๋ฉด, ์œ„์™€ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค. ์ด ๋•Œ ์ฃผํ™ฉ์ƒ‰ ์นธ์€ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด ๋•Œ ์ด๋ถ„ ํƒ์ƒ‰์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐฐ์—ด์ด ๋ฐ˜๋“œ์‹œ ์ •๋ ฌ ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๊ผญ ์ฃผ์˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž€๋‹ค.

 

 

๊ธฐ๋ณธ์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

1. ํƒ์ƒ‰ ๋ฒ”์œ„๋‚ด์˜ ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•œ๋‹ค. 

2. ์ค‘๊ฐ„ ์ธ๋ฑ์Šค์˜ ๊ฐ’๊ณผ key๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค.

3. ๊ฐ’์ด ์ค‘๊ฐ„ ๊ฐ’๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ์™ผ์ชฝ ๋ถ€๋ถ„์„, ๊ฐ’์ด ์ค‘๊ฐ„ ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์„ ํƒ์ƒ‰ํ•˜๊ณ , ๊ฐ™๋‹ค๋ฉด ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค. 

 

 

 

์œ„ 3๊ฐ€์ง€ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.

- ์ฐพ์œผ๋ ค๋Š” ๊ฐ’์„ ์ฐพ์•˜์„ ๊ฒฝ์šฐ

- ์ฐพ์œผ๋ ค๋Š” ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ

 

์ฐพ์œผ๋ ค๋Š” ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ, ์ฆ‰ ์œ„ ์ฒ˜๋Ÿผ 7์ด๋ผ๋Š” ๊ฐ’์ด ๋ฐฐ์—ด์— ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋Œ€๋กœ index 3์ด ๋ฐ˜ํ™˜ ๋˜๊ฒ ์ง€๋งŒ, ์ฐพ์œผ๋ ค๋Š” ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

 

์‰ฝ๊ฒŒ ์˜ˆ๋ฅผ ๋“ค์–ด 8์„ ์ฐพ๋Š”๋‹ค๊ณ  ํ•ด๋ณด์ž.

๊ทธ๋Ÿฌ๋ฉด ์œ„ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ๋งจ ๋งˆ์ง€๋ง‰ ๊ณผ์ •๊นŒ์ง€๋Š” ๋˜‘๊ฐ™์ด ๊ฑฐ์น  ๊ฒƒ์ด๋‹ค. ์œ„ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด ์–ธ์  ๊ฐ€๋Š” ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ํ•œ ๊ฐœ์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทผ๋ฐ ํ•œ ๊ฐœ์˜ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๊ฐ’์ด ์ฐพ์œผ๋ ค๋Š” ๊ฐ’์ธ 8๊ณผ ๋™์ผํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ถ„ํƒ์ƒ‰์„ ๋” ํ•ด๋‚˜์•„๊ฐ€์•ผ ํ•˜๋‚˜, ๊ทธ ์ดํ›„์—๋Š” ๋”์ด์ƒ ํƒ์ƒ‰ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Œ€๋กœ ๋๋‚˜๊ณ  ๋ง ๊ฒƒ์ด๋‹ค.

 

์‰ฝ๊ฒŒ ๋งํ•ด ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์™ผ์ชฝ ๋๊ณผ ์˜ค๋ฅธ์ชฝ ๋์ด ๊ฐ™์€ ๊ฒฝ์šฐ๊นŒ์ง€ ํƒ์ƒ‰์„ ํ–ˆ๋Š”๋ฐ ๊ทธ ๊ฐ’์ด key๊ฐ’๊ณผ ๊ฐ™์ง€ ์•Š์„ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฐฐ์—ด์—๋Š” key๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

๋ณดํ†ต์€ ํ•ด๋‹น ๊ฐ’์„ ๋ชป์ฐพ์„ ๊ฒฝ์šฐ ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜(Java์˜ Arrays.binarySearch ๋ฐฉ์‹), ํ˜น์€ key๊ฐ’์— ๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (ํ”ํžˆ c++์˜ upper_bound, lower_bound์˜ ๋ฐฉ์‹)

 

 

์—ฌ๊ธฐ์„œ๋Š” ๊ฐ’์˜ ์กด์žฌ ์œ ๋ฌด๋ฅผ ํŒ๋ณ„ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์Œ์ˆ˜๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•  ๊ฒƒ์ด๋‹ค. 

 

 

๊ทธ๋Ÿฌ๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋งŽ์ด ํ’€์–ด๋ณด์‹  ๋ถ„์ด๋ผ๋ฉด ๋ฐ”๋กœ ๊ฐ์ด ์˜ค์‹œ๊ฒ ์ง€๋งŒ, ์ด๋Ÿฌํ•œ ์ด์ง„ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ๋Œ€๋‹ค์ˆ˜๊ฐ€ O(logN) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

 

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์ฆ๋ช…ํ•ด๋ณด์ž๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

N๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ–๊ณ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ฃผ์–ด์กŒ๋‹ค๊ณ  ํ•ด๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ด๋ถ„ ํƒ์ƒ‰์—์„œ N/2 ์”ฉ ์ชผ๊ฐœ๊ฐ€๋ฉด์„œ ํƒ์ƒ‰์„ ํ•œ๋‹ค.

 

 

์ฆ‰, ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

 

์ฆ‰, K๋ฒˆ ๋ฐ˜๋ณตํ•œ๋‹ค๊ณ  ํ•  ๋•Œ, (1/2)K * N ์ด ๋œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

์ด ๋•Œ, ์œ„ ์ด๋ฏธ์ง€์—์„œ ๋ณด๋ฉด ๊ฒฐ๊ตญ ์ตœ์•…์˜ ๊ฒฝ์šฐ์ธ ๋งˆ์ง€๋ง‰ ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ 1์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. K๋ฒˆ ๋ฐ˜๋ณต ํ–ˆ์„ ๋•Œ ์ชผ๊ฐœ์ง„ ํฌ๊ธฐ๊ฐ€ 1์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด, ๊ฒฐ๊ตญ K๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค๊ณ  ํ–ˆ์œผ๋‹ˆ K์— ๋Œ€ํ•ด ํ’€์–ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

 

์ฆ‰, N๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ์—์„œ ์–ด๋–ค ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(logN)์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

๊ทธ๋Ÿผ ์‹œ๊ฐ„ ๋ณต์žก๋„๋„ ์•Œ์•„๋ณด์•˜์œผ๋‹ˆ ํ•œ ๋ฒˆ ์œ„๋ฅผ ํ† ๋Œ€๋กœ ์ž‘์„ฑ์„ ํ•˜๋‚˜์”ฉ ํ•ด๋ณด์ž. 

์ผ๋‹จ, '์ •๋ ฌ ๋œ ๋ฐฐ์—ด'์ด ๋“ค์–ด์˜จ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—, ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐฐ์—ด๊ณผ ์ฐพ์œผ๋ ค๋Š” ๊ฐ’์ธ key ๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด์˜จ๋‹ค๊ณ  ํ•ด๋ณด์ž.

 

๊ทธ๋Ÿผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ธํŒ…ํ•ด์•ผ ํ•  ๋ณ€์ˆ˜๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

/**
* @param arr ์ •๋ ฌ ๋œ ๋ฐฐ์—ด
* @param key ์ฐพ์œผ๋ ค๋Š” ๊ฐ’
* @return key์™€ ์ผ์น˜ํ•˜๋Š” ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค
*/
public static int binarySearch(int[] arr, int key) {

int lo = 0; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์™ผ์ชฝ ๋ ์ธ๋ฑ์Šค
int hi = arr.length - 1; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์˜ค๋ฅธ์ชฝ ๋ ์ธ๋ฑ์Šค

}

 

 

์šฐ๋ฆฌ๊ฐ€ ์ด๋ถ„ ํƒ์ƒ‰ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์™ผ์ชฝ ๋์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜์™€ ์˜ค๋ฅธ์ชฝ ๋์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๋ฅผ ๊ฐ๊ฐ lo, hi๋กœ ๋‘˜ ๊ฒƒ์ด๋‹ค.

์ด ๋•Œ ๋‹น์—ฐํ•˜์ง€๋งŒ, ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ๋Š” ์ดˆ๊ธฐ ํƒ์ƒ‰ ๋ณŒ์œ„๊ฐ€ 0 ~ ๋ฐฐ์—ด์˜ ๋์ด๋ฏ€๋กœ lo = 0, hi = arr.length - 1 ์ด ๋  ๊ฒƒ์ด๋‹ค.

 

 

๊ทธ ๋‹ค์Œ์œผ๋กœ ๋ฌด์—‡์„ ํ•ด์•ผํ• ๊นŒ?

๋ฐ”๋กœ ํƒ์ƒ‰ ๊ณผ์ •์„ ๋ฐ˜๋ณต ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต๋ฌธ๋ถ€ํ„ฐ ์ž‘์„ฑ์„ ํ•ด์ฃผ์–ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ์Œ.. ๋ฐ˜๋ณต ์กฐ๊ฑด์„ ์–ด๋–ป๊ฒŒ ์•Œ์ฃ ?

์ด ๋ถ€๋ถ„์€ ์ด๋ฏธ ์•ž์„œ ํžŒํŠธ๋ฅผ ์ฃผ์—ˆ๋‹ค.

 

๋ฐ”๋กœ ์œ„์—์„œ ์–ธ๊ธ‰ ํ–ˆ๋˜ "ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์™ผ์ชฝ ๋๊ณผ ์˜ค๋ฅธ์ชฝ ๋์ด ๊ฐ™์€ ๊ฒฝ์šฐ๊นŒ์ง€ ํƒ์ƒ‰์„ ํ–ˆ๋Š”๋ฐ ๊ทธ ๊ฐ’์ด key๊ฐ’ ...." ์ด ๋ฌธ์žฅ์ด๋‹ค.

ํ•ต์‹ฌ์ด ์™ผ์ชฝ ๋๊ณผ ์˜ค๋ฅธ์ชฝ ๋์ด ๊ฐ™์€ ๊ฒฝ์šฐ๊นŒ์ง€ ํƒ์ƒ‰์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์œ„์—์„œ ๋ณ€์ˆ˜๋กœ lo์™€ hi๋กœ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๋ฅผ ๋‘์—ˆ๋‹ค. ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ์˜ค๋ฅธ์ชฝ ๋๊ณผ ์™ผ์ชฝ ๋์ด ๊ฐ™์„ ๋•Œ ๊นŒ์ง€ ํƒ์ƒ‰ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์–ธ์ œ๊นŒ์ง€ ๋ฐ˜๋ณต์ธ ๊ฒƒ์ผ๊นŒ?

๋ฐ”๋กœ lo๊ฐ€ hi๋ณด๋‹ค ์ปค์งˆ ๋•Œ๋‹ค. ์ฆ‰, lo > hi ์ด๋ผ๋ฉด ๋”์ด์ƒ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฆ‰ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ˜๋ณต๋ฌธ ํ‹€์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

public static int binarySearch(int[] arr, int key) {

int lo = 0; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์™ผ์ชฝ ๋ ์ธ๋ฑ์Šค
int hi = arr.length - 1; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์˜ค๋ฅธ์ชฝ ๋ ์ธ๋ฑ์Šค

// lo๊ฐ€ hi๋ณด๋‹ค ์ปค์ง€๊ธฐ ์ „๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
while(lo <= hi) {

}
}

 

 

 

 

๊ทธ๋Ÿผ ์ด์ œ ๋ฐ˜๋ณต๋ฌธ ๋‚ด์— ํƒ์ƒ‰๊ณผ์ •์„ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด์ž.

์ผ๋‹จ, ์šฐ๋ฆฌ๊ฐ€ ์ด๋ถ„ ํƒ์ƒ‰์—์„œ ํฌ๊ฒŒ ๋ณด์ž๋ฉด ์„ธ ๊ฐ€์ง€ ๊ณผ์ •์„ ๊ฑฐ์ณค๋‹ค.

 

1. ์ค‘๊ฐ„ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•œ๋‹ค.

2. ์ค‘๊ฐ„๊ฐ’๊ณผ key๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค.

3. ๋น„๊ต๊ฐ’์— ๋”ฐ๋ผ ๋ฒ”์œ„๋ฅผ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ํ˜น์€ ๊ฐ’์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์ด๋ฅผ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

public static int binarySearch(int[] arr, int key) {

int lo = 0; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์™ผ์ชฝ ๋ ์ธ๋ฑ์Šค
int hi = arr.length - 1; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์˜ค๋ฅธ์ชฝ ๋ ์ธ๋ฑ์Šค

// lo๊ฐ€ hi๋ณด๋‹ค ์ปค์ง€๊ธฐ ์ „๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
while(lo <= hi) {

int mid = (lo + hi) / 2; // ์ค‘๊ฐ„์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค.

// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ
if(key < arr[mid]) {

}
// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ํด ๊ฒฝ์šฐ
else if(key > arr[mid]) {

}
// key๊ฐ’๊ณผ ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ
else {

}
}
}

 

 

 

 

์œ„ ์ฒ˜๋Ÿผ ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜๋‰  ๊ฒƒ์ด๊ณ , ํ•ด๋‹น ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์œ„์น˜๋ฅผ ์žฌ์กฐ์ •ํ•ด์ฃผ์–ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

 

 

ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด์ž.

key < arr[mid] ์ผ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

์ด๋Š” key๊ฐ’(์ฐพ์œผ๋ ค๋Š” ๊ฐ’)์ด ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„(mid)์œ„์น˜๋ณด๋‹ค ์™ผ์ชฝ์— ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ผ ๊ฒƒ์ด๋‹ค. ์ฆ‰, ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์˜ค๋ฅธ์ชฝ ๋์„ ๊ฐ€๋ฆฌํ‚ค๋Š” hi๊ฐ€ ์žฌ์กฐ์ •๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ค ๊ฐ’์œผ๋กœ ์žฌ์กฐ์ • ๋˜๋Š”์ง€๋ฅผ ์ƒ๊ฐํ•ด๋ณธ๋‹ค๋ฉด, ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๊ฐ€ ์ฐพ์œผ๋ ค๋Š” key๋Š” lo~mid ์‚ฌ์ด์— ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. ์ด ๋•Œ, arr[mid]๋Š” ์ด๋ฏธ ๋น„๊ต์ž‘์—…์„ ํ–ˆ์œผ๋‹ˆ mid(์ค‘๊ฐ„)์„ ์ œ์™ธํ•œ ์™ผ์ชฝ ๋ถ€๋ถ„์„ ํƒ์ƒ‰ ๋ฒ”์œ„๋กœ ๋ณด๋ฉด ๋œ๋‹ค.

 

(์˜ˆ๋กœ๋“ค์–ด Up & Down ๊ฒŒ์ž„์—์„œ 1~100์˜ ๋ฒ”์œ„์—์„œ 50์„ ์™ธ์ณค๋Š”๋ฐ Down์ด๋ผ๋ฉด, ๊ทธ ๋‹ค์Œ์—๋Š” 50์„ ์ œ์™ธํ•œ 1~49 ์‚ฌ์ด์˜ ์ˆ˜๊ฐ€ ํƒ์ƒ‰ ๋ฒ”์œ„์ธ ๊ฒƒ๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋‹ค.)

 

์ฆ‰, hi = mid - 1 ์ด ์žฌ์กฐ์ • ๋œ ๊ฐ’์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

๊ทธ ๋‹ค์Œ์œผ๋กœ key > arr[mid] ์ผ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

์ด๋Š” ์œ„์™€ ๋ฐ˜๋Œ€๋กœ key๊ฐ’(์ฐพ์œผ๋ ค๋Š” ๊ฐ’)์ด ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„(mid)์œ„์น˜๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์— ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ผ ๊ฒƒ์ด๋‹ค. ์ฆ‰, ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์™ผ์ชฝ ๋์„ ๊ฐ€๋ฆฌํ‚ค๋Š” lo๊ฐ€ ์žฌ์กฐ์ •๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

 

์ฆ‰, ์žฌ์กฐ์ • ๋˜๋Š” lo์˜ ๊ฐ’์€ lo = mid + 1 ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

๋งˆ์ง€๋ง‰์œผ๋กœ ์œ„ ์กฐ๊ฑด ๋ชจ๋‘ ๋งŒ์กฑํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ฆ‰ key == arr[mid] ์ผ ๊ฒฝ์šฐ์—๋Š” ์ด๋ฏธ ์ฐพ๊ณ ์žํ•˜๋Š” ๊ฐ’์„ ์ฐพ์•˜์œผ๋ฏ€๋กœ mid ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

 

 

์ž, ๊ทธ๋Ÿฌ๋ฉด ์œ„ 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ์ฑ„์›Œ๋„ฃ์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋  ๊ฒƒ์ด๋‹ค.

 

public static int binarySearch(int[] arr, int key) {

int lo = 0; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์™ผ์ชฝ ๋ ์ธ๋ฑ์Šค
int hi = arr.length - 1; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์˜ค๋ฅธ์ชฝ ๋ ์ธ๋ฑ์Šค

// lo๊ฐ€ hi๋ณด๋‹ค ์ปค์ง€๊ธฐ ์ „๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
while(lo <= hi) {

int mid = (lo + hi) / 2; // ์ค‘๊ฐ„์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค.

// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ
if(key < arr[mid]) {
hi = mid - 1;
}
// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ํด ๊ฒฝ์šฐ
else if(key > arr[mid]) {
lo = mid + 1;
}
// key๊ฐ’๊ณผ ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ
else {
return mid;
}
}
}

 

 

 

 

๊ทธ๋ฆฌ๊ณ , while(lo <= hi) ์•ˆ์—์„œ ๋ฐ˜ํ™˜๊ฐ’(return mid)์ด ์—†๋‹ค๋ฉด, ์ฆ‰ while๋ฌธ์ด ์ข…๋ฃŒ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์—†๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ–ˆ๋‹ค.

์ด ๋•Œ๋Š” ์•ž์„œ ๋งํ–ˆ๋“ฏ ๊ทผ์‚ฌ๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜, ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ํ–ˆ๊ณ , ์—ฌ๊ธฐ์„œ๋Š” ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 

์ฆ‰, ์ตœ์ข…์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

public static int binarySearch(int[] arr, int key) {

int lo = 0; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์™ผ์ชฝ ๋ ์ธ๋ฑ์Šค
int hi = arr.length - 1; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์˜ค๋ฅธ์ชฝ ๋ ์ธ๋ฑ์Šค

// lo๊ฐ€ hi๋ณด๋‹ค ์ปค์ง€๊ธฐ ์ „๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
while(lo <= hi) {

int mid = (lo + hi) / 2; // ์ค‘๊ฐ„์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค.

// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ
if(key < arr[mid]) {
hi = mid - 1;
}
// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ํด ๊ฒฝ์šฐ
else if(key > arr[mid]) {
lo = mid + 1;
}
// key๊ฐ’๊ณผ ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ
else {
return mid;
}
}

// ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ
return -1;

}

 

 

 

 

 

์œ„์™€ ๊ฐ™์ด ์ด๋ถ„ ํƒ์ƒ‰์„ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

์‚ฌ์‹ค ์ž ๊น ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ, ์ž๋ฐ”์—์„œ๋Š” Arrays ํด๋ž˜์Šค์— binarySearch ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. (์œ„์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์ด๋‹ค.)

์ฐจ์ด์ ์ด๋ผ๋ฉด ์Œ์ˆ˜๊ฐ’์„ ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ์—์„œ ์–ด๋А ๊ฐ’ ์‚ฌ์ด์— ์žˆ๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ˜ํ™˜์„ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. (์ฐธ๊ณ ๋กœ -1์„ ๋ฐ˜ํ™˜ ํ•ด์ฃผ์–ด๋„ ์ด ๋ฒˆ ๋ฌธ์ œ์—์„œ๋Š” ๋ฌด๋ฐฉํ•˜๋‹ค)

์ž๋ฐ”์—์„œ๋Š” ์Œ์ˆ˜ ๊ฐ’์„ -(low + 1) ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ์ด๋Š” ํ•ด๋‹น ๊ฐ’์ด ์–ด๋”” ์œ„์น˜์— ๊ฐ€๊นŒ์šด์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์˜ˆ๋กœ๋“ค์–ด ๋ฆฌ์ŠคํŠธ {2, 4, 7, 8} ์ด ์žˆ๊ณ , ๋ฆฌ์ŠคํŠธ์—์„œ 3์„ ์ฐพ๊ณ ์ž ํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ์—๋Š” 3์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ, 3์€ 2์™€ 4 ์‚ฌ์ด์— ์žˆ์—ˆ์œผ๋ฏ€๋กœ -2๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๋ฌด์Šจ ๋ง์ธ๊ฐ€ ํ•˜๋ฉด ์ด๋ ‡๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์Œ์ˆ˜ 0, ์ฆ‰ -0์€ ๊ตฌ๋ถ„ํ•˜๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— A0 ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ผ ๊ฒฝ์šฐ -1 index์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, -1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ฐ์†Œํ•˜๋Š” ๋ฐฉํ–ฅ์ธ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— low ์— 1์„ ๋”ํ•œ ๋’ค ์Œ์ˆ˜๋ฅผ ์ทจํ•˜๋Š” ์ด์œ ๊ฐ€ ์œ„์™€ ๊ฐ™์€ ์ด์œ  ๋•Œ๋ฌธ์ด๋‹ค.

 

๋‹ค์‹œ ์•ž์„  ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

{2, 4, 7, 8} ์ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  3์„ ์ฐพ๊ณ ์ž ํ•œ๋‹ค๋ฉด index[0] < 3 < index[1] ์‚ฌ์ด์— ์œ„์น˜ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์œ„ ๊ทœ์น™์— ๋”ฐ๋ผ ์Œ์ˆ˜๊ฐ’์œผ๋กœ ํ‘œํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด -2๋ฅผ ๋ฐ˜ํ™˜ ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

์ผ๋‹จ์€ ์ด ์ •๋„๋กœ๋งŒ ์•Œ์•„๋‘๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

 

 

 

 

 

 





  • 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์ดํ•œ๋‹ค.

 



์ด ๋ฒˆ ๋ฌธ์ œ๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ์ด๋ถ„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•˜์—ฌ ์ž…๋ ฅ ๋ฐฉ์‹์„ ๋ฐ”๊พธ์–ด ํ…Œ์ŠคํŠธํ•ด๋ณด๊ฒ ๋‹ค. ๋‹จ, ์ถœ๋ ฅ์€ ๋ชจ๋‘ StringBuilder ๋กœ ํ†ต์ผํ•˜์—ฌ ์ž…๋ ฅ๋ฐฉ๋ฒ•๋งŒ ๋‹ฌ๋ฆฌํ•˜์—ฌ ํ’€์ดํ•˜๊ณ ์ž ํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ Arrays.binarySearch() ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๋„ ์ถ”๊ฐ€ํ•ด๋†“๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

 

1. Scanner

2. BufferedReader

3. BufferedReader + Arrays.binarySerach()

 

 

 

 






  • ํ’€์ด





- ๋ฐฉ๋ฒ• 1 : [Scanner]

 

import java.util.Scanner;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

int N = in.nextInt();
int[] arr = new int[N];


for(int i = 0; i < N; i++) {
arr[i] = in.nextInt();
}


// ๋ฐฐ์—ด์€ ๋ฐ˜๋“œ์‹œ ์ •๋ ฌ๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค.
Arrays.sort(arr);

int M = in.nextInt();


StringBuilder sb = new StringBuilder();
for(int i = 0; i < M; i++) {

// ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ 1, ์—†์„ ๊ฒฝ์šฐ 0์„ ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค.
if(binarySearch(arr, in.nextInt()) >= 0) {
sb.append(1).append('\n');
}
else {
sb.append(0).append('\n');
}
}
System.out.println(sb);
}


/**
* @param arr ์ •๋ ฌ ๋œ ๋ฐฐ์—ด
* @param key ์ฐพ์œผ๋ ค๋Š” ๊ฐ’
* @return key์™€ ์ผ์น˜ํ•˜๋Š” ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค
*/
public static int binarySearch(int[] arr, int key) {

int lo = 0; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์™ผ์ชฝ ๋ ์ธ๋ฑ์Šค
int hi = arr.length - 1; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์˜ค๋ฅธ์ชฝ ๋ ์ธ๋ฑ์Šค

// lo๊ฐ€ hi๋ณด๋‹ค ์ปค์ง€๊ธฐ ์ „๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
while(lo <= hi) {

int mid = (lo + hi) / 2; // ์ค‘๊ฐ„์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค.

// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ
if(key < arr[mid]) {
hi = mid - 1;
}
// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ํด ๊ฒฝ์šฐ
else if(key > arr[mid]) {
lo = mid + 1;
}
// key๊ฐ’๊ณผ ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ
else {
return mid;
}
}

// ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ
return -1;

}
}

 

 

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ์„ค๋ช…ํ•œ ๋ฐฉ์‹ ๊ทธ๋Œ€๋กœ ๊ฐ–๊ณ ์™”๋‹ค. 

 

 

 











- ๋ฐฉ๋ฒ• 2 : [BufferedReader]

 

 

 

์ž…๋ ฅ ๋ฐฉ๋ฒ•์„ Scanner ๋Œ€์‹  BufferedReader ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์ดํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๋˜ํ•œ ๊ตฌ์กฐ๋ฅผ ์กฐ๊ธˆ ๋ณ€๊ฒฝํ–ˆ๋‹ค. ์œ„ ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด์„œ๋งŒ ์ด๋ถ„ ํƒ์ƒ‰์„ ํ•˜๊ธฐ ๋–„๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ๊ตณ์ด ๋งค ๋ฒˆ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐฐ์—ด์„ ๋„˜๊ฒจ ์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ฆ‰, ์ „์—ญ๋ณ€์ˆ˜๋กœ ๋‘๋Š” ๊ฒƒ์ด๋‹ค.

 

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

public static int[] arr;

public static void main(String[] args) throws IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int N = Integer.parseInt(br.readLine());
arr = new int[N];

StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}


// ๋ฐฐ์—ด์€ ๋ฐ˜๋“œ์‹œ ์ •๋ ฌ๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค.
Arrays.sort(arr);

int M = Integer.parseInt(br.readLine());

st = new StringTokenizer(br.readLine(), " ");

StringBuilder sb = new StringBuilder();
for(int i = 0; i < M; i++) {

// ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ 1, ์—†์„ ๊ฒฝ์šฐ 0์„ ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค.
if(binarySearch(Integer.parseInt(st.nextToken())) >= 0) {
sb.append(1).append('\n');
}
else {
sb.append(0).append('\n');
}
}
System.out.println(sb);
}


/**
* @param key ์ฐพ์œผ๋ ค๋Š” ๊ฐ’
* @return key์™€ ์ผ์น˜ํ•˜๋Š” ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค
*/
public static int binarySearch(int key) {

int lo = 0; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์™ผ์ชฝ ๋ ์ธ๋ฑ์Šค
int hi = arr.length - 1; // ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์˜ค๋ฅธ์ชฝ ๋ ์ธ๋ฑ์Šค

// lo๊ฐ€ hi๋ณด๋‹ค ์ปค์ง€๊ธฐ ์ „๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
while(lo <= hi) {

int mid = (lo + hi) / 2; // ์ค‘๊ฐ„์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค.

// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ
if(key < arr[mid]) {
hi = mid - 1;
}
// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ํด ๊ฒฝ์šฐ
else if(key > arr[mid]) {
lo = mid + 1;
}
// key๊ฐ’๊ณผ ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ
else {
return mid;
}
}

// ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ
return -1;

}
}

 

 

 

ํฌ๊ฒŒ ์–ด๋ ค์šธ ๊ฒƒ์€ ์—†์„ ๊ฒƒ์ด๋‹ค. 

๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์ด ์กฐ๊ธˆ ๋” ์„ฑ๋Šฅ์„ ๋†’์ด๊ณ ์ž ํ•œ๋‹ค๋ฉด, ์ค‘๊ฐ„ ์œ„์น˜๋ฅผ ๊ตฌํ•˜๋Š” (lo + hi) / 2 ์—์„œ 2๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์„ ๋น„ํŠธ ์‹œํ”„ํŠธ๋ฅผ ์ด์šฉํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋„ ์ข‹๋‹ค.

 

์ฆ‰, int mid = (lo + hi) >>> 1;  ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ”๊พธ๋ฉด ์กฐ๊ธˆ ๋” ์ข‹์€ ์„ฑ๋Šฅ์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

(์ฐธ๊ณ ๋กœ >> ์™€ >>> ์˜ ์ฐจ์ด๋Š” ๋น„ํŠธ๋ฅผ ๋ฐ€์–ด๋‚ผ ๋•Œ ๋น„๊ฒŒ ๋˜๋Š” ๋น„ํŠธ๋ฅผ ์ •์ˆ˜ ๊ฐ’์˜ ์ตœ์ƒ์œ„ ๋น„ํŠธ๋กœ ์ฑ„์šฐ๋А๋ƒ, 0์œผ๋กœ ์ฑ„์šฐ๋А๋ƒ์˜ ์ฐจ์ด๋‹ค. ์šฐ๋ฆฌ๋Š” 0์œผ๋กœ ์ฑ„์›Œ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— >>> ์„ ์จ์•ผํ•œ๋‹ค.)

 

 

 

 

 

 

 







- ๋ฐฉ๋ฒ• 3 : [BufferedReader + Arrays.binarySearch()]

 

 

 

 

 

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

Arrays ํด๋ž˜์Šค์˜ binarySearch ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

API๋ฌธ์„œ๋Š” ์•„๋ž˜ ๋งํฌ๋กœ ๋‘๊ฒ ๋‹ค.

 

https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#binarySearch-int:A-int-

 

Arrays (Java Platform SE 8 )

parallelPrefix public static   void parallelPrefix(T[] array, BinaryOperator  op) Cumulates, in parallel, each element of the given array in place, using the supplied function. For example if the array initially holds [2, 1, 0, 3] and the operation pe

docs.oracle.com

 

 

๋ฉ”์†Œ๋“œ๋ฅผ ๋ณด๋ฉด binaraySearch(int[] a, int key); ๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์•ž์„œ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋‹ค. a๋Š” ๋ฐฐ์—ด์ด๊ณ , key๋Š” ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด๋‹ค.

 

์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์ข€ ๋” ์ฝ”๋“œ๊ฐ€ ์งง์•„์งˆ ๊ฒƒ์ด๋‹ค.

 

 

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

public static void main(String[] args) throws IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];

StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}


// ๋ฐฐ์—ด์€ ๋ฐ˜๋“œ์‹œ ์ •๋ ฌ๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค.
Arrays.sort(arr);

int M = Integer.parseInt(br.readLine());

st = new StringTokenizer(br.readLine(), " ");

StringBuilder sb = new StringBuilder();
for(int i = 0; i < M; i++) {

// ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ 1, ์—†์„ ๊ฒฝ์šฐ 0์„ ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค.
if(Arrays.binarySearch(arr, Integer.parseInt(st.nextToken())) >= 0) {
sb.append(1).append('\n');
}
else {
sb.append(0).append('\n');
}
}
System.out.println(sb);
}


}

 

 

 

๊ธฐ์กด์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๊ฐ„ํŽธํ•œ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜๋Š” ์žˆ๊ฒ ์œผ๋‚˜.. ์‚ฌ์‹ค ์œ„์™€ ๊ฐ™์€ ํ’€์ด ๋ฐฉ๋ฒ•์€ ๋ณ„๋กœ ์ถ”์ฒœ๋“œ๋ฆฌ์ง€๋Š” ์•Š๋Š”๋‹ค.

 

 

 

 

 

 

 

 

 

 

 





  • ์„ฑ๋Šฅ






 

 

 

์ฑ„์  ๋ฒˆํ˜ธ : 31092349  -  ๋ฐฉ๋ฒ• 3 : BufferedReader + Arrays.binarySearch()

์ฑ„์  ๋ฒˆํ˜ธ : 31092345  -  ๋ฐฉ๋ฒ• 2 : BufferedReader

์ฑ„์  ๋ฒˆํ˜ธ : 31092339  -  ๋ฐฉ๋ฒ• 1 : Scanner

 

 

 

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฑฐ์˜ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ ์‚ฌ์‹ค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด์˜ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•œ๋‹ค๊ธฐ๋ณด๋‹จ ์ž…๋ ฅ์˜ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ํ™•์‹คํžˆ Scanner ๋ณด๋‹ค๋Š” BufferedReader ๊ฐ€ ๋น ๋ฅธ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

ํ•ด๋‹น ๊ธ€์€ https://st-lab.tistory.com/261 ์—์„œ ๋ฐœ์ทŒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

'Algorithm > BaekJoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 1563๋ฒˆ: ๊ฐœ๊ทผ์ƒ(Java)  (0) 2023.07.11
[Java] ์นด์šดํŒ… ์ •๋ ฌ (Counting Sort)  (0) 2022.12.27
[๋ฐฑ์ค€] 1874๋ฒˆ : ์Šคํƒ ์ˆ˜์—ด - JAVA [์ž๋ฐ”]  (0) 2021.10.25
[๋ฐฑ์ค€] 1654๋ฒˆ : ๋žœ์„  ์ž๋ฅด๊ธฐ - JAVA [์ž๋ฐ”]  (0) 2021.10.25
'Algorithm/BaekJoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€] 1563๋ฒˆ: ๊ฐœ๊ทผ์ƒ(Java)
  • [Java] ์นด์šดํŒ… ์ •๋ ฌ (Counting Sort)
  • [๋ฐฑ์ค€] 1874๋ฒˆ : ์Šคํƒ ์ˆ˜์—ด - JAVA [์ž๋ฐ”]
  • [๋ฐฑ์ค€] 1654๋ฒˆ : ๋žœ์„  ์ž๋ฅด๊ธฐ - JAVA [์ž๋ฐ”]
_๊ฑฐ๋ˆ„
_๊ฑฐ๋ˆ„
๋ธ”๋กœ๊ทธ ์ด์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค! https://velog.io/@pigonhair/posts
  • _๊ฑฐ๋ˆ„
    ๊ฑฐ๋ˆ„๋„ค๋ฃธ๐Ÿ”‘
    _๊ฑฐ๋ˆ„
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๊ฑฐ๋ˆ„๋„ค๋ฃธ (83)
      • Languages | Frameworks (41)
        • Java (10)
        • Spring (23)
        • Docker (8)
      • Git | Github (1)
      • DBMS (4)
        • SQL (4)
      • DevOps | Server (3)
      • OS (6)
        • Linux (6)
      • Algorithm (26)
        • Theory (1)
        • Data Structure (7)
        • BaekJoon (5)
        • Programmers (1)
        • KBro Study (12)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • Github
    • BaekJoon
    • solved class
    • ๋ฐฉ๋ช…๋ก
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
_๊ฑฐ๋ˆ„
[๋ฐฑ์ค€] 1920๋ฒˆ : ์ˆ˜ ์ฐพ๊ธฐ - JAVA [์ž๋ฐ”] ์ด๋ถ„ ํƒ์ƒ‰ ๋ฌธ์ œ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”