๐Ÿงฉ Algorithm/SWEA

[SWEA] 5789. ํ˜„์ฃผ์˜ ์ƒ์ž ๋ฐ”๊พธ๊ธฐ (Python/D3)

devCloud 2024. 11. 13. 21:03

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

 

SW Expert Academy

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

swexpertacademy.com


ํ’€์ด ๋ฐฉ๋ฒ•.

  • ์ƒ์ž ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
    • ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ํฌ๊ธฐ๊ฐ€ N์ธ ๋ฆฌ์ŠคํŠธ box๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๋งŒ๋“ ๋‹ค. ์ด ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ๊ตฌ๊ฐ„์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • ๊ตฌ๊ฐ„์— ๊ฐ’ ํ• ๋‹น
    • Q๊ฐœ์˜ ๊ตฌ๊ฐ„ ์ž…๋ ฅ์„ ๋ฐ˜๋ณตํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ๊ฐ ๊ตฌ๊ฐ„์— ๋Œ€ํ•ด L๋ถ€ํ„ฐ R๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉฐ, ํ˜„์žฌ ๊ตฌ๊ฐ„ ๋ฒˆํ˜ธ i ๋กœ ๋ฆฌ์ŠคํŠธ์˜ ํ•ด๋‹น ๊ตฌ๊ฐ„ ์š”์†Œ๋“ค์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
  • ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    • ๋ฆฌ์ŠคํŠธ box์˜ ๊ฐ’๋“ค์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.

Solution

T = int(input())  # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜
for test_case in range(1, T + 1):
    N, Q = map(int, input().split())
    box = [0]*N  # ๋ฐ•์Šค ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ ํ›„ ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
    for i in range(1, Q + 1):
        L, R = map(int, input().split())
        for l in range(L - 1, R):
            box[l] = i
 
    print(f"#{test_case} {' '.join(map(str, box))}")

 

 

๊ฐœ์„ ํ•  ์ 

ํ•ด๋‹น ์ฝ”๋“œ์—์„œ ํšจ์œจ์„ฑ ์ธก๋ฉด์—์„œ ํฌ๊ฒŒ ๊ฐœ์„ ํ•  ์—ฌ์ง€๋Š” ์—†๋‹ค. ์ง€๊ธˆ ์ž‘์„ฑ๋œ ์ฝ”๋“œ์˜ ๋กœ์ง์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค box ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฏธ๋ฆฌ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ๊ฐ ๊ตฌ๊ฐ„์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๊ฐ’๋“ค์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•„์š”ํ•œ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, ๋ฆฌ์ŠคํŠธ ํ• ๋‹น ๋ฒ”์œ„๋ฅผ ์กฐ๊ธˆ ์ค„์ด๋Š” ๋ฐฉ๋ฒ• ์ •๋„๋Š” ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ O(N * Q) ๋ณต์žก๋„๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ฝ”๋“œ ์ตœ์ ํ™”์˜ ์ด์ ์€ ํฌ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

  • box[l:R] ์Šฌ๋ผ์ด์‹ฑ ํ• ๋‹น ์‚ฌ์šฉ : for๋ฌธ ๋Œ€์‹  ์Šฌ๋ผ์ด์‹ฑ ํ• ๋‹น์„ ์‚ฌ์šฉํ•ด ๊ตฌ๊ฐ„์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐœ์„ ๋œ ์ฝ”๋“œ

T = int(input())  # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜
for test_case in range(1, T + 1):
    N, Q = map(int, input().split())
    box = [0] * N
    for i in range(1, Q + 1):
        L, R = map(int, input().split())
        box[L - 1:R] = [i] * (R - L + 1)

    print(f"#{test_case} {' '.join(map(str, box))}")