๐Ÿงฉ Algorithm/SWEA

[SWEA] 10580. ์ „๋ด‡๋Œ€ (Python/D3)

devCloud 2024. 11. 13. 21:26
728x90

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

 

SW Expert Academy

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

swexpertacademy.com


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

๐Ÿ’ก ์ „์„ ์ด ๊ต์ฐจํ•˜๋ ค๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ „์„  (x, y)์™€ (i, j)์— ๋Œ€ํ•ด, ๋‹ค์Œ ์กฐ๊ฑด์ด ์„ฑ๋ฆฝํ•ด์•ผ ํ•œ๋‹ค.

  • x < i ์ด๋ฉด์„œ y > j (์™ผ์ชฝ ๋์ ์€ ๋” ์™ผ์ชฝ์— ์žˆ์ง€๋งŒ, ์˜ค๋ฅธ์ชฝ ๋์ ์€ ๋” ์•„๋ž˜์ชฝ์— ์žˆ์Œ)
  • ๋˜๋Š” x > i ์ด๋ฉด์„œ y < j (์™ผ์ชฝ ๋์ ์€ ๋” ์˜ค๋ฅธ์ชฝ์— ์žˆ์ง€๋งŒ, ์˜ค๋ฅธ์ชฝ ๋์ ์€ ๋” ์œ„์ชฝ์— ์žˆ์Œ)

 

์ž…๋ ฅ ๋ฐ›๊ธฐ

  • ๊ฐ ์ „์„ ์˜ (A, B) ์ขŒํ‘œ๋ฅผ ๋ฆฌ์ŠคํŠธ a, b์— ๊ฐ๊ฐ ์ €์žฅํ•œ๋‹ค.

๊ต์ฐจ ์กฐ๊ฑด ์ฒดํฌ

  • ๊ฐ ์ „์„  (x, y)์™€ ๋‹ค๋ฅธ ์ „์„  (i, j)์˜ ์ขŒํ‘œ๋ฅผ ๋น„๊ตํ•˜์—ฌ, ๊ต์ฐจ ์กฐ๊ฑด์ด ์„ฑ๋ฆฝํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ๊ต์ฐจ ์กฐ๊ฑด์ด ์„ฑ๋ฆฝํ•  ๋•Œ๋งˆ๋‹ค result ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

์ถœ๋ ฅํ•˜๊ธฐ

  • ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•œ result ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

Solution

T = int(input())  # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜
for test_case in range(1, T + 1):
    N = int(input())  # ์ „์„  ๊ฐœ์ˆ˜
    a, b = [], []
    for _ in range(N):
        A, B = map(int, input().split())
        a.append(A)
        b.append(B)

    result = 0
    for x, y in zip(a, b):
        for i, j in zip(a, b):
            if x < i and j < y:
                result += 1
    print(f"#{test_case} {result}")

 

 

๊ฐœ์„ ํ•  ์ 

์œ„ ์ฝ”๋“œ๋Š” O(N^2) ๋ณต์žก๋„๋กœ ๋ชจ๋“  ์ „์„  ์Œ์„ ๋น„๊ตํ•˜๊ณ  ์žˆ๋‹ค. ์ž…๋ ฅ์ด ์ปค์งˆ ๊ฒฝ์šฐ ์ด ๋ฐฉ์‹์€ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ, ํšจ์œจ์ ์ธ ์ •๋ ฌ์ด๋‚˜ ์Šค์œ„ํ•‘ ๊ธฐ๋ฒ•์„ ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ต์ฐจ ์ „์„  ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์ „์„ ์„ ์‹œ์ž‘์  A์— ๋Œ€ํ•ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„, ๋์  B์— ๋Œ€ํ•ด ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด์„œ ๊ต์ฐจ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ A๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•ด ์ˆœ์„œ๋ฅผ ๊ณ ์ •ํ•˜๊ณ , ์ดํ›„์— B ๊ฐ’์„ ๋น„๊ตํ•˜๋ฉด์„œ ์ „์„ ์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์ค‘๋ณต๋œ ๋น„๊ต๋ฅผ ์ค„์—ฌ ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

  • ์ „์„  ์ •๋ ฌ
    • ์ „์„ ์˜ ์‹œ์ž‘์  A์— ๋Œ€ํ•ด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ™์€ ์ˆœ์„œ์—์„œ ์‹œ์ž‘ํ•˜๋Š” ์ „์„ ๋“ค์ด ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐ๋˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ๋์  ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ
    • ๋์  B๋Š” ์ƒˆ๋กœ์šด ๋์ ์„ ๊ณ„์† ์ถ”๊ฐ€ํ•ด๊ฐ€๋ฉฐ ๊ต์ฐจ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
    • ๊ต์ฐจ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๋ฉด result๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

 

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

T = int(input())  # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜
for test_case in range(1, T + 1):
    N = int(input())  # ์ „์„  ๊ฐœ์ˆ˜
    wires = []
    
    for _ in range(N): # ์ „์„  ์ž…๋ ฅ ๋ฐ›๊ธฐ
        A, B = map(int, input().split())
        wires.append((A, B))
   
    wires.sort() # ์‹œ์ž‘์  A ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
    result = 0
    ends = []
    
    for _, B in wires: # ๋์  B ๋น„๊ต๋ฅผ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ
        # ํ˜„์žฌ ๋์ ๋ณด๋‹ค ํฐ ๋์  ์ค‘ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋์ ์„ ์ฐพ์•„ ๊ต์ฐจ ์ˆ˜ ํ™•์ธ
        result += sum(1 for end in ends if end > B)
        ends.append(B) # ๋์  ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€
    
    print(f"#{test_case} {result}")

 


 

728x90