deo2kim
λ§žμ™œν‹€
deo2kim
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기
    • CS
      • Algorithm
      • Data Structure
      • Network
      • DB
      • OS
    • Algorithm Problem
      • Python
      • JavaScript
    • Programming language
      • Python
      • JavaScript
    • Tool
      • Jquery
      • React
    • 개발
    • Infra

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

λ°˜μ‘ν˜•
hELLO Β· Designed By μ •μƒμš°.
deo2kim

λ§žμ™œν‹€

[python] λ°±μ€€ - 1655. κ°€μš΄λ°λ₯Ό λ§ν•΄μš”
Algorithm Problem/Python

[python] λ°±μ€€ - 1655. κ°€μš΄λ°λ₯Ό λ§ν•΄μš”

2020. 11. 5. 08:07
λ°˜μ‘ν˜•

πŸ€”λ¬Έμ œ ν•΄κ²°

  • G2 | μš°μ„ μˆœμœ„ 큐

μ²˜μŒμ—λŠ” κ°€λ³κ²Œ μ •λ ¬λ‘œ ν’€μ—ˆμ§€λ§Œ, μ‹œκ°„μ΄ˆκ³Όκ°€ λ°œμƒν–ˆλ‹€. ( λ°”μ΄λ„ˆλ¦¬μ„œμΉ˜λŠ” 톡과 λœλ‹€κ³  함 )

κ°€μš΄λ° κ°’ κ΅¬ν•˜κΈ°λ₯Ό μ—΄μ‹¬νžˆ μ°Ύμ•„λ΄€μ§€λ§Œ μ—†μ—ˆλ‹€. μ–΄μ©” 수 μ—†λ‹€.

 

이 문제의 μ˜λ„λŠ” μš°μ„ μˆœμœ„ 큐λ₯Ό ν™œμš©ν•˜λŠ” 것이닀.

파이썬의 νž™ν λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄ λ˜λŠ”λ°, μ΅œμ†Œνž™ κΈ°μ€€μœΌλ‘œ λ˜μ–΄μžˆλ‹€.

μ΅œμ†Œνž™μ€ κ°€μž₯ μž‘μ€ μ›μ†Œκ°€ λ£¨νŠΈμ— μœ„μΉ˜ν•˜λŠ” 것이닀.

μš°λ¦¬λŠ” κ°€μš΄λ° 값을 μ°Ύμ•„μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— νž™μ„ λ‘κ°œ λ§Œλ“€μ–΄μ„œ

μ™Όμͺ½μ˜ κ°€μž₯ 큰 μˆ˜μ™€ 였λ₯Έμͺ½μ˜ κ°€μž₯ μž‘μ€ 수λ₯Ό λΉ„κ΅ν•˜μ—¬ κ°€μš΄λ° 값을 ꡬ할 것이닀.

μ΄λ ‡κ²Œ 두 λΆ€λΆ„μœΌλ‘œ λ‚˜λˆ„λ©΄ κ°€μš΄λ° 값을 ꡬ ν•  수 μžˆλ‹€.

ν•˜μ§€λ§Œ!!!!!!!!!!! μ΅œμ†Œνž™μœΌλ‘œ νž™ν λͺ¨λ“ˆμ΄ κ΅¬μ„±λ˜μ–΄ μžˆμœΌλ―€λ‘œ, μ™Όμͺ½μ˜ ꡬ성은 음수λ₯Ό λΆ™μ—¬μ„œ 거꾸둜 λ§Œλ“€μ–΄μ•Όν•œλ‹€.

μ΄λ ‡κ²Œ ν•˜λ©΄ μ™Όμͺ½μ˜ 0번과 였λ₯Έμͺ½μ˜ 0λ²ˆμ„ 비ꡐ할 수 μžˆλ‹€. (λ‹Ήμ—°νžˆ κΊΌλ‚Ό λ•ŒλŠ” -λ₯Ό λ‹€μ‹œ λΆ™μ—¬μ€€λ‹€.)

πŸ’»μ†ŒμŠ€ μ½”λ“œ

import sys
import heapq

input = sys.stdin.readline


def push_heap(left_heap: list, right_heap: list, num: int, n: int):
    # 숫자의 κ°œμˆ˜κ°€ ν™€μˆ˜μ΄λ©΄ 였λ₯Έμͺ½μ— λ„£κ³ , 짝수면 μ™Όμͺ½μ— λ„£κΈ°
    if n % 2 == 1:
        heapq.heappush(right_heap, num)
    else:
        heapq.heappush(left_heap, -num)


def make_mid_heap(left_heap: list, right_heap: list):
    # λ ˆν”„νŠΈμ˜ μ΅œλŒ€κ°’μ΄ 라이트의 μ΅œμ†Œκ°’λ³΄λ‹€ 크면 μœ„μΉ˜ κ΅ν™˜
    if left_heap:  # 라이트만 μžˆμ„ 수 있기 λ•Œλ¬Έμ— ifλ¬Έ 처리
        left_max = -left_heap[0]
        right_min = right_heap[0]
        if left_max > right_min:
            heapq.heappush(left_heap, -heapq.heappop(right_heap))
            heapq.heappush(right_heap, -heapq.heappop(left_heap))


def get_mid_number(left_heap: list, right_heap: list, n: int) -> int:
    # 숫자의 κ°œμˆ˜κ°€ ν™€μˆ˜μ΄λ©΄, λΌμ΄νŠΈμ—μ„œ μ΅œμ†Œκ°’μ„ λ°˜ν™˜
    # 숫자의 κ°œμˆ˜κ°€ 짝수이면, λ ˆν”„νŠΈ μ΅œλŒ€μ™€ 라이트 μ΅œμ†Œλ₯Ό λΉ„κ΅ν•˜μ—¬ μ΅œμ†Œκ°’ λ°˜ν™˜
    if n % 2 == 1:
        return right_heap[0]
    else:
        return min(-left_heap[0], right_heap[0])


if __name__ == '__main__':
    N = int(input())  # 숫자의 개수
    left_numbers = []  # μ΅œλŒ€ νž™(μ΅œλŒ€κ°’μ„ 음수둜 λ„£μ–΄ μ΅œλŒ€κ°’μ΄ 0λ²ˆμ— 였게 ν•œλ‹€)
    right_numbers = []  # μ΅œμ†Œ νž™

    for i in range(1, N + 1):
        number = int(input())
        push_heap(left_numbers, right_numbers, number, i)
        make_mid_heap(left_numbers, right_numbers)
        answer = get_mid_number(left_numbers, right_numbers, i)
        print(answer)
 

 

πŸ“•λ¬Έμ œ 확인

좜처: BACKJOON ONLINE JUDGE

링크: https://www.acmicpc.net/problem/1655

 

1655번: κ°€μš΄λ°λ₯Ό λ§ν•΄μš”

첫째 μ€„μ—λŠ” μˆ˜λΉˆμ΄κ°€ μ™ΈμΉ˜λŠ” μ •μˆ˜μ˜ 개수 N이 μ£Όμ–΄μ§„λ‹€. N은 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 100,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€. κ·Έ λ‹€μŒ N쀄에 κ±Έμ³μ„œ μˆ˜λΉˆμ΄κ°€ μ™ΈμΉ˜λŠ” μ •μˆ˜κ°€ μ°¨λ‘€λŒ€λ‘œ μ£Όμ–΄μ§„λ‹€. μ •μˆ˜λŠ” -1

www.acmicpc.net

λ°˜μ‘ν˜•
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'Algorithm Problem > Python' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[python] SWEA - 10761. μ‹ λ’°  (0) 2020.11.08
[python] λ°±μ€€ - 3190. λ±€ (μ‚Όμ„± SW μ—­λŸ‰ ν…ŒμŠ€νŠΈ 기좜 문제)  (0) 2020.11.07
[python] λ°±μ€€ - 1747. μ†Œμˆ˜&νŒ°λ¦°λ“œλ‘¬  (0) 2020.11.04
[python] λ°±μ€€ - 16916. λΆ€λΆ„ λ¬Έμžμ—΄  (0) 2020.11.03
[python] SWEA - 10912. μ™Έλ‘œμš΄ 문자  (0) 2020.11.02
    'Algorithm Problem/Python' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [python] SWEA - 10761. μ‹ λ’°
    • [python] λ°±μ€€ - 3190. λ±€ (μ‚Όμ„± SW μ—­λŸ‰ ν…ŒμŠ€νŠΈ 기좜 문제)
    • [python] λ°±μ€€ - 1747. μ†Œμˆ˜&νŒ°λ¦°λ“œλ‘¬
    • [python] λ°±μ€€ - 16916. λΆ€λΆ„ λ¬Έμžμ—΄
    deo2kim
    deo2kim
    μ½”λ”© κΈ°λ‘ν•˜κΈ°

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”