[Java]자바로 구현하는 절댓값 우선순위 큐
1. 문제
배열에 다음과 같은 연산을 할 수 있습니다.
- 배열에 정수 x (x ≠ 0) 를 넣습니다.
- 배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거합니다. ( 절댓값이 가장 작은 값이 여러개일 때는, 그 중 가장 작은 수를 출력하고, 그 값을 배열에서 제거합니다. )
비어있는 배열에서 시작하여 입력된 연산을 실행하는 프로그램을 작성해보세요.
2. 풀이
자바하면 클래스
어렵게 생각하지 말고 필요하다면 클래스를 구현해서 사용하라
절댓값을 만드는 클래스를 구현해야하는데,
문제는 절댓값을 기준으로 오름차순 정렬을 할 수 있어야하고 중요한건 절댓값만 저장하는게 아니라 원본도 저장해야한다.
그래야 우선순위 큐에서 출력할때 원본값을 출력할 수 있으니까
import java.util.Scanner;
import java.util.PriorityQueue;
class Abs implements Comparable<Abs>{
int x,y;
public Abs(int x){
if (x < 0){
this.x = -x;
} else {
this.x = x;
}
this.y = x;
}
@Override
public int compareTo(Abs a){
if (this.x == a.x){
return this.y - a.y;
}
return this.x - a.x;
}
}
public class Main {
public static void main(String[] args) {
// 여기에 코드를 작성해주세요.
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
PriorityQueue<Abs> pq = new PriorityQueue<>();
for(int i = 0; i < n; i++){
int x = sc.nextInt();
if(x != 0){
pq.add(new Abs(x));
} else {
if(pq.isEmpty() == true){
System.out.println(0);
} else {
Abs a = pq.poll();
System.out.println(a.y);
}
}
}
}
}
그 외에 사소한거지만 신경써야하는거라면.. "pq.isEmpty()로 비어있는지 확인하고 비어있으면 0을 출력"
"정렬기준 구현할때, 절댓값이 서로 같다면 원본값을 기준으로 오름차순하라는거"
'알고리즘 > 스택과 큐' 카테고리의 다른 글
코딩테스트 복기 - 배열에서 특정 수보다 작은 수 중 가장 가까운 수를 찾는 방법(find nearest element than smaller one on the left side) (0) | 2023.05.22 |
---|---|
[Java]우선순위 큐 응용 - MN개의 조합에서 조건을 만족하는 k번째 수를 찾는 빠르게 찾는 방법 1편 (0) | 2023.03.21 |
[Java]running median 복습하면서 자바로 구현해보기 (0) | 2023.03.21 |
[Java]자바 우선순위 큐 응용하기1 -뒤에서부터 생각하면 효과적으로 변하는 경우- (0) | 2023.03.20 |
우선순위 큐 재활하면서 응용력 키우기1 -카드 정렬하기, N번째 큰 수 (0) | 2023.03.18 |
TAGS.