이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[백준] 1655 가운데를 말해요 - Java / Python

  • 2022.02.13 16:46
  • Algorithm/Baekjoon
반응형

 

 

 

시간 제한을 보고 당연히 배열로 푸는건 시간 초과가 걸릴것 같아 ArrayList로 접근했다.

 

그런데 ArrayList도 시간 초과가 나온다..

 

다른 분들의 풀이를 보고 겨우 이해했다.

 

문제에서 의미하는 중앙값을 뽑아내기 위해 하나는 최대 힙, 하나는 최소 힙으로 두 가지의 우선순위 큐를 선언한다. 

 

최대 힙부터 시작해서 하나씩 숫자를 넣어 주는데, 최대 힙의 루트 노드값이 최소 힙의 루트 노드값보다 크면 두 노드값을 바꿔줘야 하고, 입력에 대해서는 최대 힙의 루트 노드값을 출력해 주면 된다.

 

이런 생각은 어떻게 하는지.. 수능 수학을 공부할 때 참신한 발상이 필요한 30번 문제를 보는 것 같다..

 

"중앙값을 빠르게 구할 때 두 가지 우선순위 큐를 만들어서 구하는 방법이 있다" 정도만 기억해 두고, 주기적으로 복습해서 잊어버리지 않도록 해야겠다.

 

Java

 

import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		int N = Integer.parseInt(br.readLine());

		PriorityQueue<Integer> min = new PriorityQueue<>();
		PriorityQueue<Integer> max = new PriorityQueue<>(Collections.reverseOrder());

		for(int i=0; i<N; i++){
			int command = Integer.parseInt(br.readLine());

			if(min.size() == max.size()){
				max.add(command);
			}else{
				min.add(command);
			}

			if(min.isEmpty()==false && max.isEmpty() == false){
				if(min.peek() < max.peek()){
					int temp = min.poll();
					min.add(max.poll());
					max.add(temp);
				}
				
			}
			sb.append(max.peek()).append('\n');
		}

		System.out.println(sb);



	}
}

 

 

Python

 

파이썬도 자바와 같은 방향으로 풀 수 있다.

 

다만, 최대 힙을 구현할 때 튜플을 사용하는 방법 대신 -1을 곱한 값을 넣어주는 방법을 사용했다.

 

import heapq
import sys

N = int(input())
maxheap = []
minheap = []


for i in range(N):
    command = int(sys.stdin.readline())
    if(len(minheap) == len(maxheap)):
        heapq.heappush(maxheap, -command)
    else:
        heapq.heappush(minheap, command)
    
    if(minheap and maxheap):
        if(maxheap[0]*-1 > minheap[0]):
            temp = heapq.heappop(minheap) 
            heapq.heappush(minheap, heapq.heappop(maxheap)*-1)
            heapq.heappush(maxheap, temp*-1)
    print(maxheap[0]*-1)
반응형

'Algorithm > Baekjoon' 카테고리의 다른 글

[백준] 17298 오큰수 -Java / Python  (0) 2022.02.14
[백준] 1991 트리 구조 -Java / Python  (0) 2022.02.14
[백준] 11286 절댓값 힙 - Java / Python  (1) 2022.02.13
[백준] 1927 최소 힙 - Java / Python  (0) 2022.02.13
[백준] 11279 최대 힙 - Java / Python  (0) 2022.02.13

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [백준] 17298 오큰수 -Java / Python

    [백준] 17298 오큰수 -Java / Python

    2022.02.14
  • [백준] 1991 트리 구조 -Java / Python

    [백준] 1991 트리 구조 -Java / Python

    2022.02.14
  • [백준] 11286 절댓값 힙 - Java / Python

    [백준] 11286 절댓값 힙 - Java / Python

    2022.02.13
  • [백준] 1927 최소 힙 - Java / Python

    [백준] 1927 최소 힙 - Java / Python

    2022.02.13
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (675) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (8)
    • 💬 기록 (7) N
    • 📚 공부 (5)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바