ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 1057 ํ† ๋„ˆ๋จผํŠธ with Python
    PS 2022. 6. 5. 16:24
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 1057 ํ† ๋„ˆ๋จผํŠธ

    ๐Ÿ’ก ์กฐ๊ฑด

    1. N๋ช…์˜ ์ฐธ๊ฐ€์ž๋Š” ๋ฒˆํ˜ธ๊ฐ€ 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ๋ฐฐ์ •๋ฐ›๋Š”๋‹ค.
      ๊ทธ๋Ÿฌ๊ณ  ๋‚œ ํ›„์— ์„œ๋กœ ์ธ์ ‘ํ•œ ๋ฒˆํ˜ธ๋ผ๋ฆฌ ์Šคํƒ€๋ฅผ ํ•œ๋‹ค. ์ด๊ธด ์‚ฌ๋žŒ์€ ๋‹ค์Œ ๋ผ์šด๋“œ์— ์ง„์ถœํ•˜๊ณ , ์ง„ ์‚ฌ๋žŒ์€ ๊ทธ ๋ผ์šด๋“œ์—์„œ ๋–จ์–ด์ง„๋‹ค.
    1. ๊ทธ ๋ผ์šด๋“œ์˜ ์ฐธ๊ฐ€์ž๊ฐ€ ํ™€์ˆ˜๋ช…์ด๋ผ๋ฉด, ๋งˆ์ง€๋ง‰ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ์ฐธ๊ฐ€์ž๋Š” ๋‹ค์Œ ๋ผ์šด๋“œ๋กœ ์ž๋™ ์ง„์ถœํ•œ๋‹ค. ๋‹ค์Œ ๋ผ์šด๋“œ์—์„  ๋‹ค์‹œ ์ฐธ๊ฐ€์ž์˜ ๋ฒˆํ˜ธ๋ฅผ 1๋ฒˆ๋ถ€ํ„ฐ ๋งค๊ธด๋‹ค.
    1. ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธฐ๋Š” ์ˆœ์„œ๋Š” ์ฒ˜์Œ ๋ฒˆํ˜ธ์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ 1๋ฒˆ๋ถ€ํ„ฐ ๋งค๊ธด๋‹ค.
      ์ด ๋ง์€ 1๋ฒˆ๊ณผ 2๋ฒˆ์ด ์Šคํƒ€๋ฅผ ํ•ด์„œ 1๋ฒˆ์ด ์ง„์ถœํ•˜๊ณ , 3๋ฒˆ๊ณผ 4๋ฒˆ์ด ์Šคํƒ€๋ฅผ ํ•ด์„œ 4๋ฒˆ์ด ์ง„์ถœํ–ˆ๋‹ค๋ฉด, 4๋ฒˆ์€ ๋‹ค์Œ ๋ผ์šด๋“œ์—์„œ ๋ฒˆํ˜ธ 2๋ฒˆ์„ ๋ฐฐ์ •๋ฐ›๋Š”๋‹ค.
      ๋ฒˆํ˜ธ๋ฅผ ๋‹ค์‹œ ๋ฐฐ์ •๋ฐ›์€ ํ›„์— ํ•œ ๋ช…๋งŒ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ๋ผ์šด๋“œ๋ฅผ ๊ณ„์† ํ•œ๋‹ค.
    1. ์ผ๋‹จ ๊น€์ง€๋ฏผ๊ณผ ์ž„ํ•œ์ˆ˜๋Š” ์„œ๋กœ ๋Œ€๊ฒฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ํ•ญ์ƒ ์ด๊ธด๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
      1 ๋ผ์šด๋“œ์—์„œ ๊น€์ง€๋ฏผ์˜ ๋ฒˆํ˜ธ์™€ ์ž„ํ•œ์ˆ˜์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๊ณผ์—ฐ ๊น€์ง€๋ฏผ๊ณผ ์ž„ํ•œ์ˆ˜๊ฐ€ ๋ช‡ ๋ผ์šด๋“œ์—์„œ ๋Œ€๊ฒฐํ•˜๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ
    1. ์ฐธ๊ฐ€์ž์˜ ์ˆ˜ N๊ณผ 1 ๋ผ์šด๋“œ์—์„œ ๊น€์ง€๋ฏผ์˜ ๋ฒˆํ˜ธ์™€ ์ž„ํ•œ์ˆ˜์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค.
      N์€ 2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , ๊น€์ง€๋ฏผ์˜ ๋ฒˆํ˜ธ์™€ ์ž„ํ•œ์ˆ˜์˜ ๋ฒˆํ˜ธ๋Š” N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.
      ์ฒซ์งธ ์ค„์— ๊น€์ง€๋ฏผ๊ณผ ์ž„ํ•œ์ˆ˜๊ฐ€ ๋Œ€๊ฒฐํ•˜๋Š” ๋ผ์šด๋“œ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์„œ๋กœ ๋Œ€๊ฒฐํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
    1. ๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•์˜ ๋ฌธ์ œ

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from sys import stdin, setrecursionlimit
    
    setrecursionlimit(10 ** 6)
    
    data = list(map(int, stdin.readline().split()))
    team = [0 for _ in range(1, data[0] + 1)]
    for i in data[1:]:
        team[i - 1] = 1
    
    
    def solve(round, length):
        global team
        temp = []
        for i in range(0, length // 2 * 2, 2):
            t1, t2 = i, i + 1
            if team[t1] and team[t2]:
                return round
            elif team[t1] or team[t2]:
                temp.append(1)
            else:
                temp.append(0)
    
        if length % 2 != 0:
            temp.append(team[-1])
    
        team = temp[:]
    
        if length % 2 != 0:
            return solve(round + 1, length // 2 + 1)
        else:
            return solve(round + 1, length // 2)
    
    
    print(solve(1, data[0]))

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ

    65536 1000 35000

    ์‹คํ–‰๊ฒฐ๊ณผ

    16

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. ์ด ์ฐธ๊ฐ€์ž์˜ ์ˆ˜๋งŒํผ team list ๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด ๋ฆฌ์ŠคํŠธ์— ๊น€์ง€๋ฏผ๊ณผ ์ž„ํ•œ์ˆ˜์˜ ๋ฒˆํ˜ธ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.
    1. solve ํ•จ์ˆ˜์—์„œ ๊น€์ง€๋ฏผ๊ณผ ์ž„ํ•œ์ˆ˜์ผ ๋•Œ temp ๋ฆฌ์ŠคํŠธ์— 1์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์•„๋‹Œ ๊ฒฝ์šฐ, 0์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
    1. ๋ถ€์ „์Šน์ธ ๊ฒฝ์šฐ, ๋งจ ๋งˆ์ง€๋ง‰ ์ธ์›์„ temp์— ์ถ”๊ฐ€ํ•œ๋‹ค.
    1. ์ ์  ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“œ๋Š” ํŒ€์„ ์žฌ๊ท€๋กœ ๊ตฌํ˜„ํ•ด์„œ ์ˆœํšŒํ•œ๋‹ค.
    1. team ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’์ด ๋‘˜ ๋‹ค 1 ์ด๋ฉด ๋ผ์šด๋“œ๋ฅผ returnํ•œ๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.