ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 2477 μ°Έμ™Έλ°­ with Python
    PS 2022. 2. 14. 18:20
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 2477 μ°Έμ™Έλ°­

    πŸ’‘ 쑰건

    1. m2의 넓이에 μžλΌλŠ” μ°Έμ™Έμ˜ 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ–‘μ˜ μ •μˆ˜ K (1 ≀ K ≀ 20)

    2. 참외밭을 λ‚˜νƒ€λ‚΄λŠ” μœ‘κ°ν˜•μ˜ μž„μ˜μ˜ ν•œ κΌ­μ§“μ μ—μ„œ μΆœλ°œν•˜μ—¬
      λ°˜μ‹œκ³„λ°©ν–₯으둜 λ‘˜λ ˆλ₯Ό λŒλ©΄μ„œ μ§€λ‚˜λŠ” λ³€μ˜ λ°©ν–₯κ³Ό 길이 (1 이상 500 μ΄ν•˜μ˜ μ •μˆ˜)

    3. λ³€μ˜ λ°©ν–₯μ—μ„œ 동μͺ½μ€ 1, μ„œμͺ½μ€ 2, 남μͺ½μ€ 3, 뢁μͺ½μ€ 4둜 λ‚˜νƒ€λ‚Έλ‹€.

    4. 참외밭은 γ„±-자 λͺ¨μ–‘μ΄κ±°λ‚˜ γ„±-자λ₯Ό 90도, 180도, 270도 νšŒμ „ν•œ λͺ¨μ–‘(┏, β”—, β”› λͺ¨μ–‘)의 μœ‘κ°ν˜•μ΄λ‹€.

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

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

    from sys import stdin
    
    n = int(stdin.readline())
    nums = []
    x, y = [], []
    for _ in range(6):
        direction, length = map(int, stdin.readline().split())
        nums.append(length)
        if direction == 1 or direction == 2:
            x.append(length)
        else:
            y.append(length)
    
    max_x = max(x)
    max_y = max(y)
    xi = nums.index(max_x)
    yi = nums.index(max_y)
    
    if xi + 1 >= 6:
        x = abs(nums[xi - 1] - nums[0])
    else:
        x = abs(nums[xi - 1] - nums[xi + 1])
    
    if yi + 1 >= 6:
        y = abs(nums[yi - 1] - nums[0])
    else:
        y = abs(nums[yi - 1] - nums[yi + 1])
    
    print(((max_x * max_y) - (x * y)) * n)

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

    예제

    7
    4 50
    2 160
    3 30
    1 60
    3 20
    1 100

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

    47600

    ⌨️ 문제 풀이

    1. 6개의 λ°©ν–₯κ³Ό λ³€μ˜ 길이λ₯Ό 각각 direction, length λΌλŠ” λ³€μˆ˜μ— μž…λ ₯λ°›λŠ”λ‹€
      λ™μ‹œμ—, λ³€μ˜ κΈΈμ΄λŠ” nums λ¦¬μŠ€νŠΈμ— μ €μž₯ν•΄μ£Όκ³ , direction이 1 μ΄κ±°λ‚˜ 2 일 λ•Œ x λ¦¬μŠ€νŠΈμ—, 아닐 κ²½μš°μ—λŠ” y λ¦¬μŠ€νŠΈμ— μ €μž₯ν•œλ‹€.

    2. x μΆ•μœΌλ‘œ μ›€μ§μ΄λŠ” λ³€μ˜ 길이 쀑 κ°€μž₯ κΈ΄ 것을 max_x 에 μ €μž₯ν•œλ‹€.
      y μΆ•μœΌλ‘œ μ›€μ§μ΄λŠ” λ³€μ˜ 길이 쀑 κ°€μž₯ κΈ΄ 것을 max_y 에 μ €μž₯ν•œλ‹€.

    3. (2)μ—μ„œ κ΅¬ν•œ max_x, max_y 값이 x 리슀트, y λ¦¬μŠ€νŠΈμ—μ„œ 인덱슀 값이 λͺ‡μΈμ§€ κ΅¬ν•œλ‹€.

    4. κ°€μž₯ κΈ΄ κ°€λ‘œλ³€(xi) 양츑에 μžˆλŠ” κ°€λ‘œ λ³€μ˜ 길이 의 차이가 전체 μ‚¬κ°ν˜• κΈΈμ΄μ—μ„œ λ‚΄κ°€ 빼쀄 μ‚¬κ°ν˜•μ˜ κ°€λ‘œ 길이
      λ§Œμ•½ xi + i κ°€ 6보닀 ν¬κ±°λ‚˜ κ°™μœΌλ©΄ nums[xi-1] - nums[0]

    5. κ°€μž₯ κΈ΄ μ„Έλ‘œλ³€(xi) 양츑에 μžˆλŠ” μ„Έλ‘œ λ³€μ˜ 길이 의 차이가 전체 μ‚¬κ°ν˜• κΈΈμ΄μ—μ„œ λ‚΄κ°€ 빼쀄 μ‚¬κ°ν˜•μ˜ μ„Έλ‘œ 길이
      λ§Œμ•½ yi + i κ°€ 6보닀 ν¬κ±°λ‚˜ κ°™μœΌλ©΄ nums[yi-1] - nums[0]

    6. μ‚¬κ°ν˜• μ΅œλŒ€ 넓이 - μž‘μ€ μ‚¬κ°ν˜•μ˜ 넓이λ₯Ό κ΅¬ν•œλ‹€.

      • μ‚¬κ°ν˜• μ΅œλŒ€ 넓이 : max_x * max_y
      • μž‘μ€ μ‚¬κ°ν˜• 넓이 : x * y
    7. 면적 λ‹Ή μ°Έμ™Έμ˜ 개수λ₯Ό 좜λ ₯ν•΄μ•Όν•˜λ‹ˆ, (6)μ—μ„œ κ΅¬ν•œ 면적에 * n 을 ν•΄μ€€ 값을 좜λ ₯ν•œλ‹€.

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

    1. 문제 풀이에 써놓은 4, 5번 을 λ– μ˜¬λ¦¬μ§€ λͺ»ν•΄μ„œ ν—€λ§Έλ˜ λ¬Έμ œμ˜€λ‹€.
    2. λΈ”λ‘œκ·Έλ₯Ό μ“°λ €κ³  λ‹€μ‹œ λ³΄λŠ”λ° 또 ν—·κ°ˆλ €μ„œ λ‹€μ‹œ ν’€μ—ˆλ‹€.
    3. 이런 μˆ˜ν•™μ μΈ 사고λ₯Ό ν•˜λŠ” 문제, DP λ¬Έμ œλŠ” 아직도 μ–΄λ ΅λ‹€.
    4. μ—°μŠ΅λ§Œμ΄ 살길이닀. λ‹€μ‹œ ν•œ 번 μ“°λ©΄μ„œ 생각해보고 ν’€μ–΄μ„œ 닀행이라고 μƒκ°ν•œλ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.