-
[๋ฐฑ์ค] 6010 Music Notes with PythonPS 2022. 6. 3. 02:00728x90๋ฐ์ํ
๐ BOJ 6010 Music Notes
๐ก ์กฐ๊ฑด
- ๋
ธ๋๋ ์ํ N๊ฐ๋ก ๊ตฌ์ฑ๋๋ฉฐ, i ๋ฒ์งธ ์ํ๋ B_i ๋นํธ๋์ ์ง์๋๋ค.
N(1 <= N <= 50,000), B_i(1 <= B_i <= 10,000)
์ด๋ค ๋ ธ๋๋ 5์ต ๋นํธ ๋ณด๋ค ๊ธธ์ง ์๋ค.
- 0์์ ๋ ธ๋๋ฅผ ์ฐ์ฃผํ๊ธฐ ์์ํ๋ฉฐ, 0์์๋ถํฐ B_1 ์ ๊น์ง ์ํ 1๊ฐ, ์๊ฐ B_1์์ B_1 + B_2 ์ง์ ๊น์ง ์ํ 2๊ฐ๋ฅผ ์ฐ์ฃผํ๋ค.
- T ์๊ฐ๋ถํฐ T+1 ์ง์ ๊น์ง์ ๊ฐ๊ฒฉ์์ ์ด๋ค ์ํ๋ฅผ ์ฐ์ฃผํด์ผํ๋์ง ๊ตฌํ๋ ๋ฌธ์ .
- ์ง๋ฌธ์ ๊ฐ์๋ Q๊ฐ๊ฐ ์๋ค.
Q(1 <= Q <= 50,000)
- ์ง๋ฌธ์ T_i(0 <= T_i <= end_of_song)์ผ๋ก ์ ๊ณต๋๋ค.
- ์ด๋ถํ์ ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin n, m = map(int, stdin.readline().split()) nums = [] now = 0 def solve(start, end, target): while end > start: mid = (start + end) // 2 if nums[mid] < target: start = mid + 1 else: end = mid return end for _ in range(n): count = int(stdin.readline()) nums.append(now + count - 1) now += count nums.append(int(1e12)) for _ in range(m): j = int(stdin.readline()) it = solve(0, len(nums), j) print(it + 1)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
3 5 2 1 3 2 3 4 0 1
์คํ๊ฒฐ๊ณผ
2 3 3 1 1
โจ๏ธ ๋ฌธ์ ํ์ด
- ๋ ธํธ๋ฅผ ์ ์ฅํ ๋, ํด๋น ๋ ธํธ์ ๋ฒ์ X๊ฐ (a <= X < b)์ ํด๋นํ๋ค๋ฉด, ์ต๋๊ฐ (b-1)๋ง ์ ์ฅํ๋ค.
- T_i ๋ถ๋ถ์์ ์ด๋ถํ์์ ์ฌ์ฉํ๋ค.
์ด๋ถ ํ์์ ์ฌ์ฉํ์ฌ ๋์จ end ๊ฐ์์ +1 ์ ํด์ฃผ๊ณ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐พ ๋ฐฐ์ด์
- ์ด๋ถํ์์ ํตํด์ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ๋ชปํ ๊ฒ ๊ฐ๋ค.
- ์์ด๋ก ๋ ๋ฌธ์ ์ ์ง๋ฌธ์ ํด์ํด ๋ฌธ์ ๋ฅผ ํ์ดํ๋๋ฐ ์์ด์ ์ด๋ ค์์ ๊ฒช์๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 17485 ์ง์ฐ์ ๋ฌ ์ฌํ (Large) with Python (0) 2022.06.04 [๋ฐฑ์ค] 13459 ๊ตฌ์ฌ ํ์ถ with Python (0) 2022.06.03 [๋ฐฑ์ค] 3151 ํฉ์ด 0 with Python (0) 2022.06.01 [๋ฐฑ์ค] 2637 ์ฅ๋๊ฐ ์กฐ๋ฆฝ with Python (3) 2022.06.01 [๋ฐฑ์ค] 2342 Dance Dance Revolution with Python (0) 2022.05.20 - ๋
ธ๋๋ ์ํ N๊ฐ๋ก ๊ตฌ์ฑ๋๋ฉฐ, i ๋ฒ์งธ ์ํ๋ B_i ๋นํธ๋์ ์ง์๋๋ค.