ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

12015๋ฒˆ: ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 2

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ˆ˜์—ด A๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” Ai๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ai ≤ 1,000,000)

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์•ž์„œ ํ‘ผ ๋ฌธ์ œ๋“ค ์ค‘์— ์ด ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋“ค์„ ๋‹ค๋ฃจ์—ˆ๋‹ค.

 

 ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋Š” ์œ„์˜ ๋ฌธ์ œ๋“ค๊ณผ ๋‹ฌ๋ฆฌ, 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
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€