728x90
문제
: 최소값을 0의 개수만큼 출력 (단, 배열이 빈 값이면 0을 출력)
문제 링크 : https://www.acmicpc.net/problem/1927
원리
우선순위 큐
풀이방법
1. HashSet을 이용한 Stream으로 min구하는 방법 [시간초과]
2. PriorityQueue로 최소값 구하는 방법 [성공]
나의 코드
1. HashSet + Stream 조합
더보기
public class no1927 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
Set<Integer> set = new HashSet<>();
for(int i=0; i<T ; i++) {
Integer num = Integer.parseInt(br.readLine());
if(num.equals(0)) {
if(set.isEmpty()) bw.write("0\n");
else{
Integer min = set.stream().mapToInt(a -> a).min().getAsInt();
bw.write(""+ min +"\n");
set.remove(min);
}
} else {
set.add(num);
}
}
bw.close();
}
}
2. 우선순위 큐 방법
public class no1927 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine()); // 테스트 케이스 수
PriorityQueue<Integer> que = new PriorityQueue<>(); // 우선순위 큐
for(int i=0; i<T ; i++) {
Integer num = Integer.parseInt(br.readLine()); // 입력된 숫자
if(num.equals(0)) { // 입력이 0일 경우,
if(que.isEmpty()) bw.write("0\n"); // 1. 큐가 비어있으면 0을 출력
else bw.write(""+ que.poll() +"\n"); // 2. 큐에 숫자가 있으면, 제일 작은수가 맨 앞에 와있으므로 바로 poll()
} else que.add(num); // 입력이 0이 아닌 경우, que에 넣음
}
bw.close(); // 출력
}
}728x90
'알고리즘 저장소 (일반방식과 나만의 풀이) > JAVA' 카테고리의 다른 글
| [백준] no18870: 좌표압축 (0) | 2023.02.10 |
|---|---|
| [백준] no1992: 쿼드트리 (0) | 2023.02.09 |
| [백준] no9375: 패션왕 신해빈 (0) | 2023.02.07 |
| [백준] no1780: 종이의 개수 (2) | 2023.02.06 |
| [백준] no1764: 듣보잡 (0) | 2023.02.05 |