https://www.acmicpc.net/problem/19637
19637๋ฒ: IF๋ฌธ ์ข ๋์ ์จ์ค
์ฒซ ๋ฒ์งธ ์ค์๋ ์นญํธ์ ๊ฐ์ N (1 ≤ N ≤ 105)๊ณผ ์นญํธ๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ ์บ๋ฆญํฐ๋ค์ ๊ฐ์ M (1 ≤ M ≤ 105)์ด ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. (1 ≤ N, M ≤ 105) ๋ ๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฐ ์นญ
www.acmicpc.net
๋ฌธ์
๊ฒ์ ๊ฐ๋ฐ์์ธ ๋ฐ๋ฆฌ๋ ์ ํฌ๋ ฅ ์์คํ ์ ๋ง๋ค์ด, ์บ๋ฆญํฐ๊ฐ ๊ฐ์ง ์ ํฌ๋ ฅ์ ๊ธฐ์ค์ผ๋ก ์นญํธ๋ฅผ ๋ถ์ฌ์ฃผ๋ ค๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด, ์ ํฌ๋ ฅ 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 ≤ 10^5)๊ณผ ์นญํธ๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ ์บ๋ฆญํฐ๋ค์ ๊ฐ์ M (1 ≤ M ≤ 10^5)์ด ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. (1 ≤ N, M ≤ 10^5)
๋ ๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฐ ์นญํธ์ ์ด๋ฆ์ ๋ํ๋ด๋ ๊ธธ์ด 1 ์ด์, 11 ์ดํ์ ์์ด ๋๋ฌธ์๋ก๋ง ๊ตฌ์ฑ๋ ๋ฌธ์์ด๊ณผ ํด๋น ์นญํธ์ ์ ํฌ๋ ฅ ์ํ๊ฐ์ ๋ํ๋ด๋ 10^9 ์ดํ์ ์์ด ์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์นญํธ๋ ์ ํฌ๋ ฅ ์ํ๊ฐ์ ๋น๋ด๋ฆผ์ฐจ์์ผ๋ก ์ฃผ์ด์ง๋ค.
N + 2๋ฒ์งธ ์ค๋ถํฐ M๊ฐ์ ๊ฐ ์ค์๋ ์บ๋ฆญํฐ์ ์ ํฌ๋ ฅ์ ๋ํ๋ด๋ ์์ด ์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ํด๋นํ๋ ์นญํธ๊ฐ ์๋ ์ ํฌ๋ ฅ์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์๋๋ค.
์ถ๋ ฅ
M๊ฐ์ ์ค์ ๊ฑธ์ณ ์บ๋ฆญํฐ์ ์ ํฌ๋ ฅ์ ๋ง๋ ์นญํธ๋ฅผ ์ ๋ ฅ ์์๋๋ก ์ถ๋ ฅํ๋ค. ์ด๋ค ์บ๋ฆญํฐ์ ์ ํฌ๋ ฅ์ผ๋ก ์ถ๋ ฅํ ์ ์๋ ์นญํธ๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋จผ์ ์ ๋ ฅ๋ ์นญํธ ํ๋๋ง ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
import sys
from bisect import bisect_left
n,m=map(int, sys.stdin.readline().split(' '))
level_info=[]
rate_info=[]
for _ in range(n):
l, r = sys.stdin.readline().strip().split(' ')
level_info.append(l)
rate_info.append(int(r))
for _ in range(m):
rate=int(sys.stdin.readline())
# ํด๋น rate๊ฐ ์ด๋ ๋ฒ์์ ํด๋นํ๋์ง ์ด๋ถํ์์ผ๋ก ํ์ํ๋ค.
# ๋จ์ for๋ฌธ์ ์ด์ฉํด์ ํ์ํ ๊ฒฝ์ฐ ์ต์
์ ๊ฒฝ์ฐ ๋ชจ๋ ์บ๋ฆญํฐ์ ๋ ๋ฒจ์ ํ์
ํ๋ ๋ฐ์ 10^5 * 10^5 ์๊ฐ๋ณต์ก๋๊ฐ ๋ฐ์ํ์ฌ ์๊ฐ์ด๊ณผ๊ฐ ๋ ์ ์๋ค.
# ์ง์ ๊ตฌํ
start, end =0, n-1
result=''
while start<=end:
mid=(start+end)//2
# mid๋ฒ์งธ ๋ ๋ฒจ์ด rate๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด, ๋ ์์ ๋ ๋ฒจ์ ๋ง์กฑํ๋์ง ํ์ธ
if rate_info[mid]>=rate:
end=mid-1
result=level_info[mid]
else:
start=mid+1
print(result)
# bisect ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
# rl=bisect_left(rate_info, rate)
# print(level_info[rl])
'์๊ณ ๋ฆฌ์ฆ > ์ด๋ถํ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 14575 ๐ฅ] ๋คํ์ด (0) | 2023.08.29 |
---|---|
[softeer level 3] 7์ฐจ ์ ๊ธฐ ์ง๋จ ํ๊ฐ - ์๋์ฐจ ํ ์คํธ (0) | 2023.08.26 |