๐Ÿงฉ Algorithm/SWEA

[SWEA] 3499. ํผํŽ™ํŠธ ์…”ํ”Œ (Python/D3)

devCloud 2024. 10. 29. 18:06
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‡

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com


ํ’€์ด

๐Ÿ’ก์นด๋“œ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ ์„œ ๊ฐ์ž ์ €์žฅํ•œ ํ›„ ๊ฒฐ๊ณผ ๋ฑ์„ ์ƒ์„ฑํ•œ๋‹ค. ํ™€์ˆ˜์ผ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ๋‚จ์€ ์นด๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ๋‹ค.

 

1๏ธโƒฃ pop() ์‚ฌ์šฉ

while len(second_half) > 0:
    result.append(first_half.pop(0))  # ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋นผ์„œ ๊ฒฐ๊ณผ์— ๋„ฃ๊ธฐ
    result.append(second_half.pop(0))
  • pop() ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๋‹ค์†Œ ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค. 
  • ๋ฆฌ์ŠคํŠธ์˜ ๋งจ ์•ž ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ๋งˆ๋‹ค ๋‚˜๋จธ์ง€ ์š”์†Œ๋ฅผ ์•ž์œผ๋กœ ๋‹น๊ฒจ์•ผ ํ•˜๋ฏ€๋กœ, ์„ฑ๋Šฅ ์ƒ ๋น„ํšจ์œจ์ ์ด๋‹ค.

 

2๏ธโƒฃ ๋ฑ ์‚ฌ์šฉ

while second_half:
    result.append(first_half.popleft())
    result.append(second_half.popleft())
  • deque ์„ ํ™œ์šฉํ•ด popleft() ๋กœ ๋ฆฌ์ŠคํŠธ์˜ ์•ž์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋น„์šฉ์„ O(1)๋กœ ์ค„์˜€๋‹ค.
  • pop() ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

 

3๏ธโƒฃ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ต์ฐจ๋กœ ํ•ฉ์น˜๊ธฐ

for i in range(len(second_half)):
    result.append(first_half[i])
    result.append(second_half[i])
  • ๋‹จ์ˆœํžˆ ๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ for ๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.
  • ์œ„์˜ ๋‘ ๋ฐฉ๋ฒ•๋ณด๋‹ค ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ณ  ์‹คํ–‰ ์†๋„๋„ ๋น ๋ฅด๋‹ค.

 

Solution

import math
T = int(input())  # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜
for test_case in range(1, T + 1):
    N = int(input())  # ์นด๋“œ ์ˆ˜
    card = list(map(str, input().split()))
    first_half = [card[i] for i in range(math.ceil(N / 2))]  # ์นด๋“œ์˜ ์ ˆ๋ฐ˜์—์„œ ์•ž ์นด๋“œ๋“ค๋งŒ ์ €์žฅ
    second_half = [card[i] for i in range(math.ceil(N / 2), N)]  # ์นด๋“œ์˜ ์ ˆ๋ฐ˜์—์„œ ๋’ค ์นด๋“œ๋“ค๋งŒ ์ €์žฅ
    result = []
    while len(second_half) > 0:
        result.append(first_half.pop(0))  # ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋นผ์„œ ๊ฒฐ๊ณผ์— ๋„ฃ๊ธฐ
        result.append(second_half.pop(0))
    # ํ™€์ˆ˜ ์ผ๋•Œ first ๋ฆฌ์ŠคํŠธ๋Š” ํ•˜๋‚˜์˜ ์นด๋“œ๊ฐ€ ๋‚จ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ถ”๊ฐ€
    if N % 2 != 0:
        result.append(first_half.pop())
    print(f"#{test_case}", end=' ')
    print(*result)

 

์ˆ˜์ •ํ•œ ์ฝ”๋“œ

from collections import deque
import math

T = int(input())  # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜
for test_case in range(1, T + 1):
    N = int(input())  # ์นด๋“œ ์ˆ˜
    card = input().split()

    # ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ ๋ฑ์„ deque๋กœ ๋งŒ๋“ค์–ด popleft()๋กœ ํšจ์œจ์ ์ธ ์ œ๊ฑฐ ์ˆ˜ํ–‰
    first_half = deque(card[:math.ceil(N / 2)])
    second_half = deque(card[math.ceil(N / 2):])

    result = []
    # ๋‘ ๋ฐ˜์ชฝ์„ ๊ต์ฐจ๋กœ ์„ž์–ด ์ƒˆ๋กœ์šด ๋ฑ์„ ์ƒ์„ฑ
    while second_half:
        result.append(first_half.popleft())
        result.append(second_half.popleft())

    # ํ™€์ˆ˜์ผ ๋•Œ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜์ชฝ์— ํ•œ ์žฅ ๋” ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€
    if first_half:
        result.append(first_half.popleft())

    # ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    print(f"#{test_case} {' '.join(result)}")

 

 

ํšจ์œจ์ ์ธ ์ฝ”๋“œ

T = int(input())  # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜
for test_case in range(1, T + 1):
    N = int(input())  # ์นด๋“œ ์ˆ˜
    card = input().split()
    
    # ์นด๋“œ ๋ฑ์„ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ
    mid = (N + 1) // 2  # ํ™€์ˆ˜์ผ ๋•Œ ์•ž์ชฝ ๋ฑ์— ํ•˜๋‚˜ ๋” ๋ฐฐ์ •
    first_half = card[:mid]
    second_half = card[mid:]
    
    # ๊ฒฐ๊ณผ ๋ฑ ์ƒ์„ฑ
    result = []
    for i in range(len(second_half)):
        result.append(first_half[i])
        result.append(second_half[i])
    
    # ํ™€์ˆ˜์ผ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ๋‚จ์€ ์นด๋“œ ์ถ”๊ฐ€
    if N % 2 != 0:
        result.append(first_half[-1])

    print(f"#{test_case} {' '.join(result)}")

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

์นด๋“œ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆŒ ๋•Œ๋ถ€ํ„ฐ ๋‡Œ๊ฐ€ ๊ตณ์€ ๊ฒƒ ๊ฐ™๋‹ค. ํ™€์ˆ˜์ผ ๊ฒฝ์šฐ ์›ํ•˜๋Š”๋Œ€๋กœ ๋‚˜๋ˆ ์ง€์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

ํ’€์ด๊ฐ€ ๋‹ค์–‘ํ•œ๋ฐ ๋‚ด ์ฝ”๋“œ๋Š” ํšจ์œจ์ ์ด์ง€ ๋ชปํ•˜๋‹ค. ์„ฑ๋Šฅ ์ƒ๊ฐ๋„ ํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค.


 

728x90