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

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

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

์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜์—ด A = {10, 20, 10, 30, 20, 50} ์ธ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์€ A = {10, 20, 10, 30, 20, 50} ์ด

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์ด์ „์— ๋‹ค๋ฃจ์—ˆ๋˜ 11053 ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ’€์ด์—์„œ ๊ฐ ์›์†Œ๋“ค๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ†ตํ•ด ์ˆ˜์—ด์˜ ๊ฐ’์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์•ž์˜ ์ˆ˜ ์ค‘ ์ž‘์€์ˆ˜๊ฐ€ ์–ผ๋งŒํผ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ฝ”๋“œ

from sys import stdin

if __name__ == '__main__':
    n = int(stdin.readline())
    nums = list(map(int, stdin.readline().split()))
    # ์ž๊ธฐ์ž์‹ ์€ ํฌํ•จํ•˜๋ฏ€๋กœ 1๋กœ ์ดˆ๊ธฐํ™”
    answer = [1] * n
    for i in range(1, n):
        for j in range(i):
            if nums[j] < nums[i]:
                answer[i] = max(answer[i], answer[j] + 1)

    max_len = max(answer)
    print(max_len)
    # ์ถ”๊ฐ€ ๋œ ๋ถ€๋ถ„
    ret = []
    for i, length in enumerate(answer[::-1]):
        if length == max_len:
            ret.append(nums[n - i - 1])
            max_len -= 1

    print(*ret[::-1])

 ์ฆ๊ฐ€ํ•˜๋Š” ์ตœ๋Œ€ ์ˆ˜์—ด์ด ๋˜๋Š” ์›์†Œ ๋ถ€ํ„ฐ, ๊ธธ์ด๋ฅผ 1์”ฉ ๊ฐ์†Œ ์‹œ์ผœ๊ฐ€๋ฉฐ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์—ด์˜ ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๋’ค์—์„œ ๋ถ€ํ„ฐ ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์„ ๊ธฐ๋กํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์ถœ๋ ฅ ํ• ๋•Œ๋Š” ๋ฐ˜์ „์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€