๐ ๋จน์ ๊ฒ์ธ๊ฐ ๋จนํ ๊ฒ์ธ๊ฐ
๋ฐฑ์ค Silver3
๋จน์ ๊ฒ์ธ๊ฐ ๋จนํ ๊ฒ์ธ๊ฐ
๋ฌธ์
์ฌํด์๋ ๋ ์ข ๋ฅ์ ์๋ช ์ฒด 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๋ณด๋ค ํฐ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
2
5 3
8 1 7 3 1
3 6 1
3 4
2 13 7
103 11 290 215
์์ ์ถ๋ ฅ 1
7
1
๐ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ
๋ฌธ์ ์ ๋ ฅ ๊ฐ์๊ฐ 2๋ง์ด๋ค. ๋ธ๋ฃจํธ ํฌ์ค๋ก ์ ํ๋ฆฐ๋ค. ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์จ์ผ ํ ์ง ๊ฐ์ด ์ ์๋ค.
๊ทธ๋์ ๊ทธ๋ฅ ์ผ์ค๊ป ํ์ด๋ณด์๋ค. ์ผ๋จ ์ฝ๋์ ์๊ฐ๋ณต์ก๋๋ฅผ O(n)์ผ๋ก ๋ง์ถ๋๋ฐ ์ง์คํ๋ค.
๐ ๊ณผ์ ์ค๊ณ/๊ด๋ฆฌ
์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ ํฌ์์ ๋ฐฐ์ด๊ณผ ๋จนํ๋ ๋ฐฐ์ด์ ํ ๋ฐฐ์ด๋ก ๋ชฐ์ ๋ด๋๋ค.
์ด ๋, ํํ ํ์์ผ๋ก flag๋ฅผ ์ค๋ค.
์ด๋ฅผ ํ ๋ฉด, (1,e)๋ ํฌ์์์ด๋ฉฐ ํฌ๊ธฐ๊ฐ 1์ด๋ผ๋ ๋ป์ด๊ณ (6,f)๋ ๋จน์ด์ด๋ฉฐ ํฌ๊ธฐ๊ฐ 6์ด๋ผ๋ ๋ป์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐฐ์ด์ ์ ๋ ฌํ๋ค. ์ผ๋จ ํฌ๊ธฐ ์์ผ๋ก ์ ๋ ฌ๋ ๊ฒ์ด๋ฉฐ ํฌ๊ธฐ๊ฐ ๊ฐ๋ค๋ฉด ํฌ์์๊ฐ ์ฐ์ ์์๋ก ์ ๋ ฌ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ฒ ํ์ฌ ์ ์ฒด ๋ฐฐ์ด์ ์ํํ๋ฉฐ ํฌ์์๊ฐ ๋์ค๋ฉด ๊ทธ ์์ ์๋ ๋จน์ด๋ค์ ๋ค ๋จน์ด์น์ธ ๊ฒ์ด๊ณ ๋จน์ด๊ฐ ๋์ค๋ฉด ๋จน์ด ๊ฐ์๋ฅผ ์ฆ๊ฐ์์ผ์ค๋ค.
๐จ๐ปโ๐ป CODE
import sys
input = sys.stdin.readline
def solution():
answer = 0
b_count = 0
arr.sort()
for i in range(len(arr)):
if arr[i][1] == 'e':
answer += b_count
if arr[i][1] == 'f':
b_count += 1
return answer
for _ in range(int(input())):
n,m = map(int,input().split())
arr = []
temp = list(map(int,input().split()))
for i in range(n):
arr.append((temp[i],'e'))
temp = list(map(int,input().split()))
for i in range(m):
arr.append((temp[i],'f'))
answer = solution()
print(answer)
๋ค๋ฅธ ์ฌ๋์ ํ์ด
๋ฌธ์ ๋ฅผ ๋ค ํผํ, ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ๋ฅผ ๋ณด์๋๋ฐ ํฌํฌ์ธํฐ์ ์ด์งํ์์ผ๋ก ํ ์ ์์๋ค.
2๊ฐ์ ์ ์ ๋ฐฐ์ด์ ๋น๊ตํ ๋ ํฌํฌ์ธํฐ ํน์ ์ด์งํ์์ ์ฌ์ฉํ๋ฉด ๋์ฑ ๋น ๋ฅธ ์๊ฐ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค๋ ์ฌ์ค์ ๊นจ๋ฌ์๋ค.
bisect library
Python์์๋ โ์ ๋ ฌ๋ ๋ฐฐ์ดโ์์ ํน์ ํ ์์๋ฅผ ์ฐพ์ ๋ ์์ฃผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์๊ฐ ์กด์ฌํ๋ค.
๋ฐ๋ก bisect ํจ์์ด๋ค.
bisect_left(a, x) : ์ ๋ ฌ๋ ์์๋ฅผ ์ ์งํ๋ฉด์ ๋ฆฌ์คํธ a์ ๋ฐ์ดํฐ x๋ฅผ ์ฝ์ ํ ๊ฐ์ฅ ์ผ์ชฝ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ
bisect_right(a, x) : ์ ๋ ฌ๋ ์์๋ฅผ ์ ์งํ๋ฉด์ ๋ฆฌ์คํธ a์ ๋ฐ์ดํฐ x๋ฅผ ์ฝ์ ํ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ
import bisect
for _ in range(int(input())):
N, M = map(int, input().split())
A = sorted(list(map(int, input().split())))
B = sorted(list(map(int, input().split())))
cnt = 0
for a in A:
cnt += (bisect.bisect(B, a-1))
print(cnt)