ํฐ์คํ ๋ฆฌ ๋ทฐ
๐จ๐ป ์ฝ๋ฉํ
์คํธ/๋ฐฑ์ค
๋ฐฑ์ค: 12015 ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด 2
dirmathfl 2020. 9. 7. 22:25728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์์ ํผ ๋ฌธ์ ๋ค ์ค์ ์ด ๋ฌธ์ ์ ์ ์ฌํ ๋ฌธ์ ๋ค์ ๋ค๋ฃจ์๋ค.
- ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด
- ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 4
- ๊ฐ์ฅ ํฐ ์ฆ๊ฐ ๋ถ๋ถ ์์ด
- ๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด
- ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด
ํ์ง๋ง ์ด ๋ฌธ์ ๋ ์์ ๋ฌธ์ ๋ค๊ณผ ๋ฌ๋ฆฌ, N์ ํฌ๊ธฐ๊ฐ ์ต๋ 1,000,000์ผ๋ก ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ์์ผ๋ก ํ๊ณ ์ ํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค. ์์ ๋ค๋ฃฌ ๋ฌธ์ ๋ค์ ์๊ฐ ๋ณต์ก๋๊ฐ O(N^2)์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์์ด์ ํ์ํ๋ ๋ฐ ์์ด ์๊ฐ์ ์ต์ ํํ ์ ์๋ ๋ฐฉ์์ด ํ์ํ๋ค.
์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด ๋ฌธ์ ๋ ์ต์ ํ ๋ฌธ์ ์ ๋ํด ์ด๋ฏธ ์ ์๋ ค์ ธ ์๋ ๋ฌธ์ ์ด๋ค. ๋๋ฌด์ํค์๋ ์ด์ ๊ด๋ จํ ์ค๋ช ์ด ์์ผ๋ฉฐ ์ด๋ฅผ ์ดํดํ๊ณ ๋ฌธ์ ๋ฅผ ํ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ค.
- list๋ฅผ ํ๋ ๋ง๋ค์ด, ์ฐ์ ์์ด์ ์ฒซ ์์๋ฅผ ์ฝ์ ํ๋ค.
- list์ ๋ง์ง๋ง ์์๋ณด๋ค ์์ด์์ ๊ฐ์ ธ์จ ์ซ์๊ฐ ํฌ๋ฉด list์ ์ฝ์ ํ๋ค.
- ์๋ ๊ฒฝ์ฐ, ๋ฆฌ์คํธ ๋ด์ ํด๋น ์ซ์๋ฅผ ์ฝ์ ํ ์ ์๋ ์์น๋ฅผ ์ด์ง ํ์์ ํตํด ๊ณ์ฐํ ํ ๊ฐ์ ๊ฒฝ์ ํ๋ค.
์ฝ๋
from sys import stdin
def search_index(num):
s, e = 0, len(lis) - 1
while s < e:
m = (s + e) // 2
if lis[m] == num:
s = e = m
if lis[m] < num:
s = m + 1
elif lis[m] > num:
e = m
return s
if __name__ == '__main__':
n = int(stdin.readline())
nums = list(map(int, stdin.readline().split()))
lis = [nums.pop(0)]
for num in nums:
if lis[-1] < num:
lis.append(num)
else:
lis[search_index(num)] = num
print(len(lis))
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 10610 30 (0) | 2020.09.08 |
---|---|
๋ฐฑ์ค: 1783 ๋ณ๋ ๋์ดํธ (0) | 2020.09.08 |
๋ฐฑ์ค: 2109 ์ํ๊ฐ์ฐ (0) | 2020.09.07 |
๋ฐฑ์ค: 1202 ๋ณด์ ๋๋ (0) | 2020.09.06 |
๋ฐฑ์ค: 1080 ํ๋ ฌ (0) | 2020.09.06 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ