1461번: 도서관
세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책
www.acmicpc.net
package baekjoon;
import java.util.*;
import java.io.*;
public class b1461 {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
PriorityQueue<Integer> pq = new PriorityQueue<>((p1, p2) -> p2 - p1);
PriorityQueue<Integer> nq = new PriorityQueue<>((p1, p2) -> p2 - p1);
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n; i++) {
int tmp = Integer.parseInt(st.nextToken());
if(tmp < 0)
nq.offer(Math.abs(tmp));
else
pq.offer(tmp);
}
int maxNum = 0;
if (pq.isEmpty()) {
maxNum = nq.peek();
} else if (nq.isEmpty()) {
maxNum = pq.peek();
} else {
maxNum = Math.max(pq.peek(), nq.peek());
}
int ans = cal(pq, m);
ans += cal(nq, m);
ans -= maxNum;
bw.write(ans + "");
bw.close();
}
public static int cal(PriorityQueue<Integer> q, int m) {
int ans = 0;
while (!q.isEmpty()) {
int tmp = q.poll();
for (int i = 0; i < m - 1; i++) {
q.poll();
if (q.isEmpty()) {
break;
}
}
ans += tmp * 2;
}
return ans;
}
}
package baekjoon;
import java.util.*;
import java.io.*;
public class b1461 {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int maxNum = Integer.parseInt(st.nextToken());
ArrayList<Integer> arr = new ArrayList<>();
ArrayList<Integer> Uarr = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n; i++) {
int tmp = Integer.parseInt(st.nextToken());
if(tmp < 0)
Uarr.add(Math.abs(tmp));
else
arr.add(tmp);
}
if(arr.isEmpty())
arr.add(0);
else if(Uarr.isEmpty())
Uarr.add(0);
Collections.sort(arr);
Collections.sort(Uarr);
int ans = 0;
if(Collections.max(arr) <= Collections.max(Uarr)) {
ans = cal(arr, Uarr, maxNum);
}
else {
ans = cal(Uarr, arr, maxNum);
}
bw.write(ans+"");
bw.close();
}
public static int cal(ArrayList<Integer> arr, ArrayList<Integer> uarr, int m) {
int ans = 0;
for(int i = arr.size()-1; i >= 0 ; i-=m) {
if(i % m == 1 || m == 1) {
ans += arr.get(i) * 2;
}
else if(i == arr.size()-1) {
ans += arr.get(i) * 2;
}
}
for(int i = uarr.size()-1 ; i >= 0 ;i-=m) {
if(i >= uarr.size()-m-1) {
ans += uarr.get(i);
}
else {
ans += uarr.get(i) * 2;
}
}
return ans;
}
}
반례 하나 빼고 다른 예제는 다 잘 돌아가는데 제출하면 1%도 아니고 걍 바로 틀렸습니다 나와요...진짜...ㅠ

여기저기 고치다가...홧병걸려서 쓰러지는게 더 빠를 거 같아서...구글링 하기로 했어요...
package baekjoon;
import java.util.*;
import java.io.*;
public class b1461 {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
PriorityQueue<Integer> pq = new PriorityQueue<>((p1, p2) -> p2 - p1);
PriorityQueue<Integer> nq = new PriorityQueue<>((p1, p2) -> p2 - p1);
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n; i++) {
int tmp = Integer.parseInt(st.nextToken());
if(tmp < 0)
nq.offer(Math.abs(tmp));
else
pq.offer(tmp);
}
int maxNum = 0;
if (pq.isEmpty()) {
maxNum = nq.peek();
} else if (nq.isEmpty()) {
maxNum = pq.peek();
} else {
maxNum = Math.max(pq.peek(), nq.peek());
}
int ans = cal(pq, m);
ans += cal(nq, m);
ans -= maxNum;
bw.write(ans + "");
bw.close();
}
public static int cal(PriorityQueue<Integer> q, int m) {
int ans = 0;
while (!q.isEmpty()) {
int tmp = q.poll();
for (int i = 0; i < m - 1; i++) {
q.poll();
if (q.isEmpty()) {
break;
}
}
ans += tmp * 2;
}
return ans;
}
}
되게 구글링 하니까
이렇게 하면 될걸 싶은 되게 명쾌한 답을 얻은 느낌? 이었습니다 ㅠ
[BOJ] 백준 1461번 : 도서관 (JAVA) (tistory.com)

10 1
9999 -999 8888 -8888 -9999 1 2 -45 -56 88
-> 67931
이 반례 참고하시면 좋을 거 같아요
이거 원래 제 코드에서는 안 돌아갔었거든요!

'BOJ' 카테고리의 다른 글
[JAVA]백준 1038번 - 감소하는 수 (0) | 2023.08.30 |
---|---|
[JAVA]백준 1355 - 구멍난 케이크 자르기 (0) | 2023.08.29 |
[JAVA] 1103번 - 게임 (0) | 2023.08.27 |
[JAVA] 백준 7453번 - 합이 0인 네 정수 (0) | 2023.08.26 |
[JAVA]백준 1162번 - 도로포장 (0) | 2023.08.25 |
댓글