-
[Python] ๋ฐฑ์ค 19637 IF๋ฌธ ์ข ๋์ ์จ์ค (Binary Search)๐ป Algorithm/Python 2022. 7. 8. 19:33
๐ ๋ฌธ์
๊ฒ์ ๊ฐ๋ฐ์์ธ ๋ฐ๋ฆฌ๋ ์ ํฌ๋ ฅ ์์คํ ์ ๋ง๋ค์ด, ์บ๋ฆญํฐ๊ฐ ๊ฐ์ง ์ ํฌ๋ ฅ์ ๊ธฐ์ค์ผ๋ก ์นญํธ๋ฅผ ๋ถ์ฌ์ฃผ๋ ค๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด, ์ ํฌ๋ ฅ 10,000 ์ดํ์ ์บ๋ฆญํฐ๋ WEAK, 10,000 ์ด๊ณผ ๊ทธ๋ฆฌ๊ณ 100,000 ์ดํ์ ์บ๋ฆญํฐ๋ NORMAL, 100,000 ์ด๊ณผ ๊ทธ๋ฆฌ๊ณ 1,000,000 ์ดํ์ ์บ๋ฆญํฐ๋ STRONG ์นญํธ๋ฅผ ๋ถ์ฌ์ค๋ค๊ณ ํ์. ์ด๋ฅผ IF๋ฌธ์ผ๋ก ์์ฑํ๋ค๋ฉด ์๋์ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค.
if power <= 10000 print WEAK else if power <= 100000 print NORMAL else if power <= 1000000 print STRONG
ํผ์์ ๊ฒ์์ ๊ฐ๋ฐํ๋๋ผ ๋งค์ฐ ๋ฐ์ ๋ฐ๋ฆฌ๋ฅผ ๋์ ํด์, ์บ๋ฆญํฐ์ ์ ํฌ๋ ฅ์ ๋ง๋ ์นญํธ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์นญํธ์ ๊ฐ์ N (1 ≤ N ≤ 105)๊ณผ ์นญํธ๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ ์บ๋ฆญํฐ๋ค์ ๊ฐ์ M (1 ≤ M ≤ 105)์ด ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. (1 ≤ N, M ≤ 105)
๋ ๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฐ ์นญํธ์ ์ด๋ฆ์ ๋ํ๋ด๋ ๊ธธ์ด 1 ์ด์, 11 ์ดํ์ ์์ด ๋๋ฌธ์๋ก๋ง ๊ตฌ์ฑ๋ ๋ฌธ์์ด๊ณผ ํด๋น ์นญํธ์ ์ ํฌ๋ ฅ ์ํ๊ฐ์ ๋ํ๋ด๋ 109 ์ดํ์ ์์ด ์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์นญํธ๋ ์ ํฌ๋ ฅ ์ํ๊ฐ์ ๋น๋ด๋ฆผ์ฐจ์์ผ๋ก ์ฃผ์ด์ง๋ค.
N + 2๋ฒ์งธ ์ค๋ถํฐ M๊ฐ์ ๊ฐ ์ค์๋ ์บ๋ฆญํฐ์ ์ ํฌ๋ ฅ์ ๋ํ๋ด๋ ์์ด ์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ํด๋นํ๋ ์นญํธ๊ฐ ์๋ ์ ํฌ๋ ฅ์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์๋๋ค.
์ถ๋ ฅ
M๊ฐ์ ์ค์ ๊ฑธ์ณ ์บ๋ฆญํฐ์ ์ ํฌ๋ ฅ์ ๋ง๋ ์นญํธ๋ฅผ ์ ๋ ฅ ์์๋๋ก ์ถ๋ ฅํ๋ค. ์ด๋ค ์บ๋ฆญํฐ์ ์ ํฌ๋ ฅ์ผ๋ก ์ถ๋ ฅํ ์ ์๋ ์นญํธ๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋จผ์ ์ ๋ ฅ๋ ์นญํธ ํ๋๋ง ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
3 8
WEAK 10000
NORMAL 100000
STRONG 1000000
0
9999
10000
10001
50000
100000
500000
1000000์์ ์ถ๋ ฅ 1
WEAK
WEAK
WEAK
NORMAL
NORMAL
NORMAL
STRONG
STRONG์์ ์ ๋ ฅ 2
3 5
B 100
A 100
C 1000
99
100
101
500
1000์์ ์ถ๋ ฅ 2
B
B
C
C
C
๐ ํ์ด
import sys from bisect import bisect_left input = sys.stdin.readline n, m = map(int, input().split()) title = [] power = [] for _ in range(n): a, b = input().split() title.append(a) power.append(int(b)) for _ in range(m): print(title[bisect_left(power, int(input()))])
์์ 2์ ๊ฒฝ์ฐ,
title = [B, A, C] power = [100, 100, 1000] # input ์ฐจ๋ก๋ก 99, 100, 101, 500, 1000
bisect_left(power, 99)๋ 0์ ๋ฐํ → title[0] = B
bisect_left(power, 100)์ 0์ ๋ฐํ → title[0] = B
bisect_left(power, 101)์ 2๋ฅผ ๋ฐํ → title[2] = Cbisect ๋ผ์ด๋ธ๋ฌ๋ฆฌ
bisect(a, b)๋ b๊ฐ a์ ๋ค์ด๊ฐ ์ ์๋ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์์น๋ฅผ ๋ฐํํฉ๋๋ค.
a = [1, 5, 6, 7, 10] b = 6 print(bisect(a, b)) # 3
a = [1, 5, 6, 7, 10], b = 6์ด๋ฉด b๊ฐ 5์ 6 ์ฌ์ด ๋๋ 6๊ณผ 7 ์ฌ์ด์ ๋ค์ด๊ฐ ์ ์์ผ๋ bisect(a, b)๋ ๊ฐ๋ฅํ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์์น๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ 6๊ณผ 7 ์ฌ์ด ์์น์ธ ์ธ๋ฑ์ค์ธ 3์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.
a = [1, 5, 6, 7, 10] b = 6 print(bisect_left(a, b)) # 2
๊ฐ๋ฅํ ๊ฐ์ฅ ์ผ์ชฝ ์์น๋ฅผ ๋ฐํํ๋ ค๋ฉด bisect์ bisect_left๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. bisect_right๋ ์๋๋ฐ, ์ด๋ bisect_left์ ํค์ค๋งค๋๋ฅผ ๋ง์ถ๊ธฐ ์ํ ๊ฒ์ผ ๋ฟ bisect์ ์ญํ ์ ๊ฐ์ต๋๋ค.
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 16206 ๋กค์ผ์ดํฌ (Greedy) (0) 2022.07.08 [Python] ๋ฐฑ์ค 4358 ์ํํ (Counter) (0) 2022.07.08 [Python] ๋ฐฑ์ค 16953 A โ B (Greedy/BFS) (0) 2022.07.08 [Python] ๋ฐฑ์ค 15787 ๊ธฐ์ฐจ๊ฐ ์ด๋ ์ ํค์น๊ณ ์ํ์๋ฅผ (๊ตฌํ) (0) 2022.07.08 [Python] ๋ฐฑ์ค 11286 ์ ๋๊ฐ ํ (Heapq) (0) 2022.07.08