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 |