ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 15970 ν™”μ‚΄ν‘œ 그리기 with Python
    PS 2022. 2. 20. 23:01
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 15970 ν™”μ‚΄ν‘œ 그리기

    πŸ’‘ 쑰건

    1. λΆ€λΆ„ μ μˆ˜κ°€ μžˆλŠ” 문제.
    2. μ λ“€μ˜ 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ N
    3. N개의 쀄 κ°κ°μ—λŠ” 점의 μ’Œν‘œμ™€ 색깔을 λ‚˜νƒ€λ‚΄λŠ” 두 μ •μˆ˜ x와 yκ°€ 주어진닀.
    4. λͺ¨λ“  μ μ—μ„œ μ‹œμž‘ν•˜λŠ” ν™”μ‚΄ν‘œλ“€μ˜ 길이 합을 좜λ ₯ν•˜λŠ” 문제.
    5. 각 점은 N개의 색깔 쀑 ν•˜λ‚˜λ₯Ό 가진닀.
    6. 각 점 p에 λŒ€ν•΄μ„œ, pμ—μ„œ μ‹œμž‘ν•˜λŠ” 직선 ν™”μ‚΄ν‘œλ₯Ό μ΄μš©ν•΄μ„œ λ‹€λ₯Έ 점 q에 μ—°κ²°ν•˜λ €κ³  ν•œλ‹€.
      μ—¬κΈ°μ„œ, 점 qλŠ” p와 같은 μƒ‰κΉ”μ˜ 점듀 쀑 p와 거리가 κ°€μž₯ κ°€κΉŒμš΄ 점이어야 ν•œλ‹€.
      λ§Œμ•½ κ°€μž₯ κ°€κΉŒμš΄ 점이 두 개 이상이면 μ•„λ¬΄κ±°λ‚˜ ν•˜λ‚˜λ₯Ό μ„ νƒν•œλ‹€.
    7. λΈŒλ£¨νŠΈν¬μŠ€μœ ν˜•μ˜ 문제

    πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

    from sys import stdin
    
    n = int(stdin.readline())
    arr = []
    
    for _ in range(n):
        x, y = map(int, stdin.readline().split())
        arr.append((x, y))
    
    
    def solve(color, idx):
        min_cost = int(1e9)
        for t_idx, t_color in arr:
            if t_idx != idx and t_color == color:
                if abs(idx - t_idx) < min_cost:
                    min_cost = abs(idx - t_idx)
    
        return min_cost
    
    
    res = 0
    for idx, color in arr:
        if color != 0:
            res += solve(color, idx)
    print(res)

    πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

    예제

    5
    0 1
    1 2
    3 1
    4 2
    5 1

    μ‹€ν–‰κ²°κ³Ό

    13

    ⌨️ 문제 풀이

    1. n을 μž…λ ₯ 받은 λ’€, n개의 점의 μœ„μΉ˜ν™” μƒ‰μ˜ 번호λ₯Ό μž…λ ₯ λ°›λŠ”λ‹€.
    2. μž…λ ₯ 받은 각 점의 μœ„μΉ˜μ™€ μƒ‰μ˜ λ²ˆν˜ΈλŠ” arr λ¦¬μŠ€νŠΈμ— μ €μž₯ν•œλ‹€.
    3. arr 리슀트λ₯Ό μˆœνšŒν•œλ‹€.
      점의 색깔이 0이 μ•„λ‹Œ 경우, solve(색, μœ„μΉ˜) 에 λ„˜κ²¨μ€€λ‹€.
    4. solve ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ λ‹€μ‹œ arr 리슀트λ₯Ό μˆœνšŒν•˜λ©΄μ„œ, 점의 μœ„μΉ˜λŠ” 같지 μ•ŠμœΌλ‚˜ 색깔이 같은 점을 μ°ΎλŠ”λ‹€.
    5. 같은 μƒ‰κΉ”μ˜ 점이 μžˆλ‹€λ©΄ κ°€μž₯ μž‘μ€ 점의 거리λ₯Ό min_cost 에 μ €μž₯ν•˜κ³  λ°˜ν™˜ν•œλ‹€.
    6. λ°˜ν™˜κ°’μ„ res 에 더해 좜λ ₯ν•œλ‹€.

    πŸ’Ύ λŠλ‚€μ 

    1. 자칫 잘λͺ»μƒκ°ν•˜λ©΄ μ–΄λ ΅κ²Œ 느껴질 λ¬Έμ œμ˜€λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.
    2. μž…λ ₯받은 n의 크기λ₯Ό 보고 μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚˜μ§€ μ•Šμ„ 것이라고 νŒλ‹¨ν•˜κ³  ν’€μ΄ν•΄μ„œ μ‰½κ²Œ ν’€μ—ˆμŠ΅λ‹ˆλ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.