[백준/자료구조-큐] 11286: 절댓값 힙 - 자바

2022. 8. 16. 22:34· Problem Solving/CT-Java
목차
  1. 문제
  2. 풀이

문제


https://www.acmicpc.net/problem/11286

 

11286번: 절댓값 힙

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net

 

풀이


다른 사람은 어떻게 느꼈을지 모르겠지만 본인에게는 어려웠던 문제 

특히 "배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다." 라는 조건을 어떻게 해야할지 감이 잡히지 않았음.

 

우선순위 큐를 생성하면서 비교 조건을 

  • 절대값이 같을 때 음수 -> 양수 로 정렬을 해주고 
  • 절대값이 같지 않은 수일 때 오름차순 정렬을 하였음. ( -1, 1, 2,-2 일 때 -1,1,-2,2 로 정렬)

다시말해, 

문제에서 포인트는 우선순위 큐의 비교조건을 comparator를 사용하여 compare를 재정의 하였음

(1, 1, -1, -1, 2, -2 가 들어온다면 -1, -1, 1, 1, -2, 2 로 정렬시킴)

 

package _UnsolvedProblem;

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

public class BOJ_11286 {
	public static void main(String[] args) throws Exception {
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
			
				@Override
				public int compare(Integer o1, Integer o2) {
					if (Math.abs(o1) == Math.abs(o2)) return o1 - o2;
					return Math.abs(o1) - Math.abs(o2);
				}
		});
		
		int n = Integer.parseInt(br.readLine());
		for (int i = 0; i <n; i++) {
			int num = Integer.parseInt(br.readLine());
			if(num!=0) queue.offer(num);
			else {
				if(queue.size() == 0) bw.write("0\n");
				else bw.write(queue.poll()+"\n");
			}
		}
		bw.flush();
		bw.close();
	}
}

'Problem Solving > CT-Java' 카테고리의 다른 글

[백준/브루트포스, 구현] 15686: 치킨 배달 - 자바  (0) 2022.08.16
[SWEA/구현] 4012: [모의 SW역량 테스트] 요리사  (0) 2022.08.16
[백준/그리디, DP] 2839: 설탕배달 - 자바  (0) 2022.08.16
[백준/분할정복] 2630: 색종이 만들기 - 자바  (0) 2022.08.16
[정올/그리디] 1828: 냉장고  (0) 2022.08.16
  1. 문제
  2. 풀이
'Problem Solving/CT-Java' 카테고리의 다른 글
  • [백준/브루트포스, 구현] 15686: 치킨 배달 - 자바
  • [SWEA/구현] 4012: [모의 SW역량 테스트] 요리사
  • [백준/그리디, DP] 2839: 설탕배달 - 자바
  • [백준/분할정복] 2630: 색종이 만들기 - 자바
White Han
White Han
Software Developer
sudo apt-get happinessSoftware Developer
White Han
sudo apt-get happiness
White Han
전체
오늘
어제
  • 분류 전체보기 (183)
    • Language (35)
      • Java (17)
      • Java-Weekly-study (0)
      • Python (18)
    • BackEnd (11)
      • Server (2)
      • Spring (3)
      • Spring Security (0)
      • JDBC (1)
      • NodeJS (2)
      • LINUX (3)
    • DataBase (10)
      • MySQL (5)
      • MongoDB (4)
      • Oracle (1)
    • Infra (4)
      • Docker (4)
    • CS (38)
      • OS (38)
    • Problem Solving (79)
      • Algorithm (8)
      • CT-Java (30)
      • CT-Python (41)
    • IDE (1)
      • eclipse (1)
      • vscode (0)
    • Etc. (3)
      • Git (1)
      • TDD, Refactor, CleanCode (1)
      • Conference (1)
    • 기록 (2)
      • 후기 (1)
      • 프로젝트 회고록 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

  • 방문해 주셔서 감사합니다.

인기 글

태그

  • 싸피 후기
  • 알파스캔 AOC 24B1X
  • java
  • Java this
  • 자바스크립트
  • 프로세스
  • 자바스크립트 개념
  • 싸피8기
  • 운영체제 역할
  • 자바스크립스 식별자 종류
  • 운영체제 구조
  • 24인치 모니터 추천
  • 사무용 모니터 추천
  • Java Inheritance
  • 프로세서
  • 자바 super
  • javascript
  • AOC 24B1X
  • 사무용 모니터
  • SSAFY
  • OS
  • 운영체제
  • 알파스캔 모니터
  • 싸피 합격
  • javascript identifier
  • Java super
  • 자바 this
  • 자바스크립트 식별자
  • 자바 inheritance
  • 싸피

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
White Han
[백준/자료구조-큐] 11286: 절댓값 힙 - 자바
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.