Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 17장
- 가장 긴 증가하는 부분 수열2
- java의 정석
- 2166번
- springboot
- BOJ
- 10830번
- 11286번
- 코딩 테스트
- Dxerr.h
- 자바의 정석
- 2206번
- DxTrace
- Adapater Pattern
- 냄새와 휴리스틱
- 2156번
- Design Pattern
- 11758번
- 프로그래머스
- Design Patterns
- 1300번
- 클린코드
- 코딩테스트
- 9장
- java
- 1043번
- 백준
- Spring
- SerialDate 리펙터링
- programmers
Archives
- Today
- Total
Don't give up!
[백준] 11286번 : 절댓값 힙 (java) 본문
어떻게 생각하고 문제를 풀었는가?
절대값이 가장 작은 값을 출력하고, 절대 값이 가장 작은 값이 여러 개 있을 경우 가장 작은 값을 출력해야 합니다.
0이 입력으로 주어질 때마다 출력을 수행해야 하므로 각 입력에 대해 절댓값과 실제 값을 미리 저장한 후 두 값의 비교를 통해 우선순위를 결정하는 것이 중요하다고 생각하였습니다.
코드
import java.io.*;
import java.util.PriorityQueue;
class Main {
private static final PriorityQueue<Modulus> priorityQueue = new PriorityQueue<>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(reader.readLine());
StringBuilder stringBuilder = new StringBuilder();
for(int i=0; i<n; i++){
int value = Integer.parseInt(reader.readLine());
if(value != 0){
priorityQueue.offer(new Modulus(value));
} else{
stringBuilder.append(getResult()).append("\n");
}
}
reader.close();
System.out.println(stringBuilder);
}
private static int getResult(){
return priorityQueue.isEmpty()? 0 : priorityQueue.poll().value;
}
private static class Modulus implements Comparable<Modulus>{
int absolute;
int value;
Modulus(int value){
this.absolute = Math.abs(value);
this.value = value;
}
@Override
public int compareTo(Modulus o) {
if(o.absolute == this.absolute){
return this.value - o.value;
}
return this.absolute - o.absolute;
}
}
}
우선 순위 큐를 사용하여 코드를 작성하였습니다.
절댓값과 실제 값을 모두 담는 클래스 Modulus를 정의하고, 우선 순위 큐에 삽입함으로써 절댓값과 실제값을 비교하여 우선순위를 결정하도록 하였습니다.
우선 순위 큐에 클래스가 들어가기 위해서는 클래스에 Comparable 인터페이스를 구현하거나, 우선 순위 큐 초기화시에 Comparator를 인자로 생성하여야 합니다.
Comparable 인터페이스를 구현하는 것을 선택하였으며 해당 인터페이스의 compareTo 함수를 Override하였습니다.
compareTo함수는 절댓값이 같을 경우 실제 값의 비교를 하도록 하였고, 그렇지 않을 경우 절댓값의 비교를 통해 해당 객체의 값이 작을 경우 우선순위가 높도록 하였습니다.
'Coding Test > BOJ' 카테고리의 다른 글
[백준] 2156번 : 포도주 시식 (java) (0) | 2021.08.25 |
---|---|
[백준] 1655번 : 가운데를 말해요 (java) (0) | 2021.08.22 |
[백준] 12015번 : 가장 긴 증가하는 부분 수열 2 (java) (0) | 2021.08.21 |