ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 10163 색쒅이 with Python
    PS 2022. 3. 9. 23:06
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 10163 색쒅이

    πŸ’‘ 쑰건

    1. 평면에 색깔이 μ„œλ‘œ λ‹€λ₯Έ μ§μ‚¬κ°ν˜• λͺ¨μ–‘μ˜ 색쒅이 Nμž₯이 ν•˜λ‚˜μ”© μ°¨λ‘€λ‘œ 놓여진닀. μ΄λ•Œ 색쒅이가 λΉ„μŠ€λ“¬ν•˜κ²Œ λ†“μ΄λŠ” κ²½μš°λŠ” μ—†λ‹€.

    2. μƒ‰μ’…μ΄μ˜ μž₯수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ N (1 ≀ N ≀ 100)

    3. Nμž₯의 색쒅이가 주어진 μœ„μΉ˜μ— μ°¨λ‘€λ‘œ 놓일 경우, 각 색쒅이가 λ³΄μ΄λŠ” λΆ€λΆ„μ˜ 면적을 κ΅¬ν•˜λŠ” 문제

    4. κ°€λ‘œ μ΅œλŒ€ 1001μΉΈ, μ„Έλ‘œ μ΅œλŒ€ 1001칸으둜 κ΅¬μ„±λœ 격자 λͺ¨μ–‘이닀.
      격자의 각 칸은 κ°€λ‘œ, μ„Έλ‘œ 길이가 1인 면적이 1인 μ •μ‚¬κ°ν˜•

    5. 색쒅이가 놓인 μƒνƒœλŠ” κ°€μž₯ μ™Όμͺ½ μ•„λž˜ 칸의 λ²ˆν˜Έμ™€ λ„ˆλΉ„, 높이λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ„€ μ •μˆ˜λ‘œ ν‘œν˜„ν•œλ‹€.
      예λ₯Ό λ“€μ–΄, μœ„ κ·Έλ¦Όμ—μ„œ νšŒμƒ‰μœΌλ‘œ ν‘œμ‹œλœ μƒ‰μ’…μ΄λŠ” (1,4)κ°€ κ°€μž₯ μ™Όμͺ½ μ•„λž˜μ— 있고 λ„ˆλΉ„ 3, 높이 2μ΄λ―€λ‘œ 1 4 3 2둜 ν‘œν˜„ν•œλ‹€.
      색쒅이가 격자 경계 λ°–μœΌλ‘œ λ‚˜κ°€λŠ” κ²½μš°λŠ” μ—†λ‹€.

    6. κ΅¬ν˜„ μœ ν˜•μ˜ 문제

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

    from sys import stdin
    
    n = int(stdin.readline())
    board = [[-1] * 1001 for _ in range(1001)]
    res = [0 for _ in range(n)]
    minx, miny = 1001, 1001
    maxx, maxy = 0, 0
    
    for k in range(n):
        x, y, width, height = map(int, stdin.readline().split())
        for i in range(x, x + width):
            for j in range(y, y + height):
                board[i][j] = k
        minx, miny = min(x, minx), min(y, miny)
        maxx, maxy = max(x + width, maxx), max(y + height, maxy)
    
    for k in range(n):
        for i in range(minx, maxx):
            for j in range(miny, maxy):
                if board[i][j] == k:
                    res[k] += 1
    
    for i in res:
        print(i)

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

    예제

    4
    0 2 10 10
    7 9 8 4
    8 4 10 6
    6 0 12 10

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

    62
    24
    0
    120

    ⌨️ 문제 풀이

    1. μƒ‰μ’…μ΄μ˜ 정보λ₯Ό μž…λ ₯λ°›μ•„μ„œ κ°€μž₯ μ™Όμͺ½ μ•„λž˜μΉΈμ—μ„œλΆ€ν„° λ†“λŠ”λ‹€.

    2. (1)번의 μž‘μ—…μ„ λ°˜λ³΅λ¬Έμ„ ν†΅ν•΄μ„œ board 에 μ±„μ›Œλ„£λŠ”λ°, μ΄λ•Œ k의 값은 μƒ‰μ’…μ΄μ˜ 번호λ₯Ό λœ»ν•œλ‹€.

    3. 색쒅이가 놓인 λΆ€λΆ„μ—μ„œ κ°€μž₯ μž‘μ€ μ’Œν‘œμ˜ κ°’κ³Ό κ°€μž₯ 큰 μ’Œν‘œμ˜ 값을 κ³„μ‚°ν•˜μ—¬ λ³€μˆ˜λ₯Ό κ°±μ‹ ν•œλ‹€.

    4. λͺ¨λ“  μž…λ ₯을 λ°›μ•˜λ‹€λ©΄, kλ₯Ό μˆœνšŒν•˜λ©΄μ„œ 각 μƒ‰μ’…μ΄μ˜ 면적을 ꡬ해쀀닀.

    5. 각 λ²ˆν˜Έμ— μ•Œλ§žμ€ μƒ‰μ’…μ΄μ˜ 면적은 res λ³€μˆ˜μ— k λ²ˆμ§Έμ— 더해지고, resλ₯Ό μˆœνšŒν•˜λ©΄μ„œ 좜λ ₯ν•˜λ©΄ λœλ‹€.

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

    1. pypy둜 μ œμΆœν•˜μ—¬ ν’€μ—ˆλ˜ λ¬Έμ œμ΄λ‹€.
    2. μ„œλΈŒνƒœμŠ€ν¬κ°€ μžˆλŠ” λ¬Έμ œλΌμ„œ 문제λ₯Ό 풀이할 λ•Œ, λͺ‡ 번 틀리기도 ν–ˆλ‹€.
    3. 이 λ•Œ, κ΅¬ν˜„μ΄ μ°Έ νž˜λ“€κ³  μ–΄λ €μ› μ—ˆλŠ”λ°, μ„±μž₯ν–ˆμŒμ„ λŠκΌˆλ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.