
문제링크: https://www.acmicpc.net/problem/18228



일단 문제는 비교적 간단합니다.
펭귄이 있는 위치를 기준으로 왼쪽의 최소값과 오른쪽의 최소값을 구하면 되는 문제입니다.
처음에 생각하지 않고 바로 적용했던 풀이는 먼저 펭귄의 위치를 찾고 해당 위치를 기준으로 왼쪽, 오른쪽 최소값을 찾는 방법입니다.
이렇게 하면 중첩되진 않더라도 총 4개의 for문이 나오더라구요.
오답처리 됐네요.. ㅎ
문제가 간단한 만큼 충분한 고민을 해야 합니다..
한 번의 for문으로 풀이가 가능합니다.
우선순위 큐를 이용하는 풀이입니다.
L)이 발견될 때까지 pq에 삽입합니다. (min-heap)package com.example.boj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;
/**
* https://www.acmicpc.net/problem/18228
* 펭귄추락대책위원회
*/
public class Q18228_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine(), " ");
int res = 0;
Queue<Integer> pq = new PriorityQueue<>();
for (int i=0;i<n;i++) {
int cur = Integer.parseInt(st.nextToken());
if (cur == -1) {
res += pq.poll();
pq.clear();
continue;
}
pq.offer(cur);
}
System.out.println(res+pq.poll());
}
}