-
[๋ฐฑ์ค] 1940 ์ฃผ๋ชฝ with PythonPS 2022. 2. 7. 22:35728x90๋ฐ์ํ
๐ BOJ 1940 ์ฃผ๋ชฝ
๐ก ์กฐ๊ฑด
๊ฐ์ท์ ๋ ๊ฐ์ ์ฌ๋ฃ๋ก ๋ง๋๋๋ฐ ๋ ์ฌ๋ฃ์ ๊ณ ์ ํ ๋ฒํธ๋ฅผ ํฉ์ณ์ M(1 โค M โค 10,000,000)์ด ๋๋ฉด ๊ฐ์ท์ด ๋ง๋ค์ด ์ง๊ฒ ๋๋ค.
N(1 โค N โค 15,000) ๊ฐ์ ์ฌ๋ฃ์ M์ด ์ฃผ์ด์ก์ ๋ ๋ช ๊ฐ์ ๊ฐ์ท์ ๋ง๋ค ์ ์๋์ง๋ฅผ ๊ตฌํ๋ ๋ฌธ์
์ ๋ ฌ, ํฌ ํฌ์ธํฐ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin from bisect import bisect_left n = int(stdin.readline()) m = int(stdin.readline()) arr = sorted(list(map(int, stdin.readline().split()))) res = 0 visited = set() arr.sort() for i in arr: f = bisect_left(arr, m-i) if f < n and arr[f] != i: temp = arr[f] if temp + i == m and (temp, i) not in visited: visited.add((temp, i)) visited.add((i, temp)) res += 1 print(res)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
6 9 2 7 4 1 5 3
์คํ๊ฒฐ๊ณผ
2
โจ๏ธ ๋ฌธ์ ํ์ด
์ ๋ ฌ์ ํด์ ํฌํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒ์ด ์ด ๋ฌธ์ ์ ์์ ์ธ ๊ฒ ๊ฐ๋ค.
๋๋ ํ์ด์ฌ bisect ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ bisect_left ๋ฅผ ์จ์ ์ฝ๊ฒ ํ์ ์์๋ค.
์ฌ๋ฃ๋ค์ ๊ฐ ๊ณ ์ ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์ ๋์ arr์ด๋ผ๋ ๋ณ์๋ฅผ ์ ๋ ฌํ๊ณ ์ํํ๋ค.
(3)๋ฒ์ ํตํด ์ํํ๋ ๊ฐ์ธ i๊ฐ ์๋ค.
๊ฐ์ท์ด ๋ง๋ค์ด์ง๊ธฐ ์ํ ๊ฐ m ์์ i๋ฅผ ๋บ ๊ฐ์ด arr ๋ฆฌ์คํธ์ ์์นํ๊ณ ์๋์ง
bisect_left ๋ฅผ ํตํด ์ด๋ถํ์ํด์ค ๊ฒฐ๊ณผ๋ฅผ f ๋ณ์์ ์ ์ฅํ๋ค.
f ๊ฐ n ๋ณด๋ค ์๊ณ , arr[f]๊ฐ i์ ๊ฐ์ง ์๋ค๋ฉด, i + f๋ m์ด๋ค.(4)์์ ๋์จ ๊ฒฐ๊ณผ ๊ฐ์ด ์ฐธ์ธ์ง ํ์ธํ๊ณ , (arr[f], i) ์ ์์ด ํ๋ฒ๋ ๋์จ์ ์๋ ์กฐํฉ์ด๋ผ๋ฉด
res + 1์ ํด์ฃผ๊ณ , (arr[f], i), (i, arr[f]) ๋ฅผ visited์ ์ ์ฅํด ์ด๋ฏธ ๋์จ ์กฐํฉ์ด๋ผ๊ณ ํ์ํด๋๋ค.(1)~(5) ๊ณผ์ ์ ๊ฑฐ์น๊ณ ๋ ํ, res๋ฅผ ์ถ๋ ฅํด์ค๋ค.
๐พ ๋๋์
- ํฌํฌ์ธํฐ๋ก ํ๋ฉด ํจ์ฌ ์ฌ์ ์ ๊ฒ ๊ฐ์๋ฐ, 3๋ฌ ์ ์ ๋๋ ์ bisect ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์๊น?
- ํฌํฌ์ธํฐ๋ฅผ ์ฐ์ตํ๊ธฐ ๋งค์ฐ ์ข์ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 6603 ๋ก๋ with Python (0) 2022.02.10 [๋ฐฑ์ค] 2535 ์์์ ์ ๋ณด์ฌ๋ฆผํผ์๋ with Python (0) 2022.02.08 [๋ฐฑ์ค] 1292 ์ฝ๊ฒ ํธ๋ ๋ฌธ์ with Python (0) 2022.02.03 [๋ฐฑ์ค] 16234 ์ธ๊ตฌ ์ด๋ with Python (0) 2022.02.03 [๋ฐฑ์ค] 15658 ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (2) with Python (0) 2022.02.02