๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/7795)
<๋จน์ ๊ฒ์ธ๊ฐ ๋จนํ ๊ฒ์ธ๊ฐ>
๋ฌธ์
์ฌํด์๋ ๋ ์ข ๋ฅ์ ์๋ช ์ฒด A์ B๊ฐ ์กด์ฌํ๋ค. A๋ B๋ฅผ ๋จน๋๋ค. A๋ ์๊ธฐ๋ณด๋ค ํฌ๊ธฐ๊ฐ ์์ ๋จน์ด๋ง ๋จน์ ์ ์๋ค. ์๋ฅผ ๋ค์ด, A์ ํฌ๊ธฐ๊ฐ {8, 1, 7, 3, 1}์ด๊ณ , B์ ํฌ๊ธฐ๊ฐ {3, 6, 1}์ธ ๊ฒฝ์ฐ์ A๊ฐ B๋ฅผ ๋จน์ ์ ์๋ ์์ ๊ฐ์๋ 7๊ฐ์ง๊ฐ ์๋ค. 8-3, 8-6, 8-1, 7-3, 7-6, 7-1, 3-1.
๋ ์๋ช ์ฒด A์ B์ ํฌ๊ธฐ๊ฐ ์ฃผ์ด์ก์ ๋, A์ ํฌ๊ธฐ๊ฐ B๋ณด๋ค ํฐ ์์ด ๋ช ๊ฐ๋ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ A์ ์ N๊ณผ B์ ์ M์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ A์ ํฌ๊ธฐ๊ฐ ๋ชจ๋ ์ฃผ์ด์ง๋ฉฐ, ์ ์งธ ์ค์๋ B์ ํฌ๊ธฐ๊ฐ ๋ชจ๋ ์ฃผ์ด์ง๋ค. ํฌ๊ธฐ๋ ์์ ์ ์์ด๋ค. (1 ≤ N, M ≤ 20,000)
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค, A๊ฐ B๋ณด๋ค ํฐ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- ์๊ฐ ์ด๊ณผ ์ฝ๋
import sys
if __name__=='__main__':
t=int(sys.stdin.readline())
for i in range(t):
n,m=map(int, sys.stdin.readline().split())
a=list(map(int, sys.stdin.readline().split()))
b=list(map(int, sys.stdin.readline().split()))
b.sort(reverse=True)
result=0
for j in a:
idx=0
while True:
if idx >= m:
break
if j>b[idx]:
result+=(m-idx)
break
idx+=1
print(result)
- B๋ง ์ ๋ ฌ ํ A ๊ฐ๊ณผ ๋น๊ตํ์ฌ ํฌ๋ฉด ๊ทธ ์ดํ๋ก๋ A๊ฐ B๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ m-idx๋ฅผ ์ด์ฉํ์ฌ result ๊ตฌํจ
๊ณ์ํด์ ๋ฐ์ํ๋ ์๊ฐ ์ด๊ณผ๋ก ๊ฒฐ๊ตญ ๊ฒ์์ ํ์ ๋น๋ ธ๋ค. ์ด ๋ฌธ์ ๋ ์ฌ์ค ์ด๋ถ ํ์ ๋ฌธ์ ์๋ค. ํ์ง๋ง ๋... ์ด๋ฆฌ ๋ณด๊ณ ์ ๋ฆฌ ๋ด๋ ์ด๋ถ ํ์์ผ๋ก ํ์ง ์์๋ค(?) ์ง๊ธ ์ฝ๋์์๋ ์กฐ๊ธ๋ง ๋ ํ๋ฉด ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ์ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ A๋ ์ ๋ ฌ ํ idx๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์๋ค.
์๋ฅผ ๋ค์ด ์ ๋ ฅ์ด
A [8, 1, 7, 3, 1]
B [3, 6, 1]
์ด๋ผ๊ณ ํ์.
์์ ์๊ฐ ์ด๊ณผ ์ฝ๋๋
A [8, 1, 7, 3, 1]
B [6, 3, 1]
B๋ง ์ ๋ ฌ๋ ์ด ์ํ์์ A๋ฅผ ์ํํ๋ฉฐ B ๊ฐ๊ณผ ๋น๊ตํด ๊ทธ ๊ฐ๋ณด๋ค ํฌ๋ฉด ๋๋จธ์ง ๊ฐ ๋ณด๋ค๋ ํด ๊ฒ์ด๊ธฐ ๋๋ฌธ์ m-idx๋ฅผ result์ ๋ํด์ฃผ๋ ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
ํ์ง๋ง ์๋์ ํต๊ณผํ ์ฝ๋๋
A [8, 7, 3, 1, 1]
B [6, 3, 1]
์ด์ ๊ฐ์ด A, B๋ฅผ ๋ ๋ค ์ ๋ ฌํ์ฌ 8>6 ์ด๋ฏ๋ก idx=0, result์ 3์ ๋ํ๊ณ ,
7>6 ์ด๋ฏ๋ก idx=0, result์ 3์ ๋ํ๊ณ
3>1 ์ด๋ฏ๋ก idx=2, resut์ 1์ ๋ํ๊ณ
์ด๋ฐ ์์ผ๋ก ์์์์ ๊ฐ์ด m-idx๋ ๋ง์ง๋ง, A๋ฅผ ์ ๋ ฌํด์ค์ผ๋ก์จ idx๋ฅผ ๋ค์ 0์ผ๋ก ์ด๊ธฐํํด์ค ํ์๊ฐ ์๋ค๋ ์ ์ด ๋ฌ๋๋ค.
- ํต๊ณผํ ์ฝ๋
import sys
if __name__=='__main__':
t=int(sys.stdin.readline())
for i in range(t):
n,m=map(int, sys.stdin.readline().split())
a=list(map(int, sys.stdin.readline().split()))
b=list(map(int, sys.stdin.readline().split()))
#์ ๋ ฌ
a.sort(reverse=True)
b.sort(reverse=True)
result=0
idx=0
for j in a: # A list
while True:
if idx >= m: # index ์ข
๋ฃ ์กฐ๊ฑด
break
if j>b[idx]: # ํฌ๋ฉด -> ๋๋จธ์ง ๊ฐ๋ณด๋ค๋ ๋ค ํผ
result+=(m-idx)
break
idx+=1
print(result)
- A, B ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
- for๋ฌธ, while๋ฌธ ํ์ฉ
- ํต์ฌ: idx, m-idx
์๊ฐ๐ค
์์ฃผ ์กฐ๊ธ์ ์๊ฐ์ ์ฐจ์ด๋ก ๋ง๊ณ ํ๋ฆฐ ๊ฒ์ด ๊ฒฐ์ ๋๋ค๋ ๊ฒ์ ๋๋๋ค..
์ ์ด ์์ฃผ ์กฐ๊ธ์ ์๊ฐํ์ง ๋ชปํ ๊น?!?!?!?!!?
์์ ์ค๋ช ํ ๊ฑธ ๋ณด๋ฉด ๋ด๊ฐ ์ดํดํ ๊ฒ์ ์ต๋ํ ์์ธํ ์ ์ผ๋ ค ํ์ผ๋ ์์ฃผ ์ฃผ์ ์ฃผ์ ์ด ๋์ด๋ฒ๋ฆฐ ๊ฒ ๊ฐ๋ค.. ๐ฅ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1260_DFS์ BFS (0) | 2022.01.06 |
---|---|
[Baekjoon] 5397_ํค๋ก๊ฑฐ (0) | 2022.01.05 |
[Baekjoon] 14426_์ ๋์ฌ ์ฐพ๊ธฐ (0) | 2021.12.27 |
[Baekjoon] 10211_Maximum Subarray (0) | 2021.11.01 |
[Baekjoon] 13417_์นด๋ ๋ฌธ์์ด (0) | 2021.10.20 |