๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ProgramSolve/Baekjoon

[BOJ] 13904๋ฒˆ - ๊ณผ์ œ (Java)

by SooooooooS 2024. 1. 5.
728x90

๐Ÿ› ๏ธ ๋ฌธ์ œ ๐Ÿ› ๏ธ


๐Ÿ—’๏ธ ์„ค๋ช… ๐Ÿ—’๏ธ

์ด ๋ฌธ์ œ์—์„œ ํ•ต์‹ฌ์€ ๋งˆ๊ฐ๊ธฐํ•œ์ด๋‹ค.

์šฐ์„  ๋‹น์—ฐํžˆ ์ ์ˆ˜๊ฐ€ ์ตœ๋Œ€๋กœ ๋˜๋ ค๋ฉด ๊ณผ์ œ์— ๋ถ€์—ฌ๋œ ์ ์ˆ˜๊ฐ€ ํฐ ๊ฒƒ์„ ํ•ด์•ผํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋งˆ๊ฐ๊ธฐํ•œ์ด ์ง€๋‚˜๋ฉด ์•„๋ฌด๋ฆฌ ๋†’์•„๋„ ์“ธ ์ˆ˜ ์—†๋‹ค.

์ž…๋ ฅ๋œ ์˜ˆ์ œ๋ฅผ ์ •๋ ฌํ•œ ๊ฒฝ์šฐ

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์˜ˆ์ œ๋ฅผ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ •๋ ฌํ•ด๋ณด์•˜๋‹ค

  • ๋งˆ๊ฐ๊ธฐํ•œ์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ, ๋งˆ๊ฐ๊ธฐํ•œ์ด ๊ฐ™์œผ๋ฉด ์ ์ˆ˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
  • ๋งˆ๊ฐ๊ธฐํ•œ์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ, ๋งˆ๊ฐ๊ธฐํ•œ์ด ๊ฐ™์œผ๋ฉด ์ ์ˆ˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ

1. ๋งˆ๊ฐ๊ธฐํ•œ์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ 1์ผ๋ถ€ํ„ฐ ํ™•์ธํ•˜๊ธฐ

  • 1์ผ์งธ : 1, 2, 3, 4, 4, 4, 6
  • 2์ผ์งธ : 2, 3, 4, 4, 4, 6
  • 3์ผ์งธ : 3, 4, 4, 4, 6
  • 4์ผ์งธ : 4, 4, 4, 6
  • 5์ผ์งธ : 6
  • 6์ผ์งธ : 6

์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณผ์ œ๋Š” ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‚ ์งœ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.

1์ผ์งธ์— ์–ด๋Š ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ์ตœ๋Œ€ ์ ์ˆ˜๊ฐ€ ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด 6์ผ์งธ๊นŒ์ง€ ํƒ์ƒ‰ํ•ด๋ด์•ผ์ง€๋งŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค.

 

2. ๋งˆ๊ฐ๊ธฐํ•œ์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋‚ ๋ถ€ํ„ฐ ํ™•์ธํ•˜๊ธฐ

์ด์ „์— ์•ž์—์„œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋’ค์—์„œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜์—ฌ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ค„์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ์ ์ด ์žˆ๋‹ค.

 

[BOJ] 12919๋ฒˆ - A์™€ B 2 (Java)

๐Ÿ› ๏ธ ๋ฌธ์ œ ๐Ÿ› ๏ธ ๐Ÿ—’๏ธ ์„ค๋ช… ๐Ÿ—’๏ธ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋„ ํฌ์ง€ ์•Š๊ณ  ์—ฐ์‚ฐ๋„ ๊ฐ„๋‹จํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. public static int solve(String s, String t) { if(s.length() == t.length()) { if(s.e

soo-note.tistory.com

  • 6์ผ์งธ : 6
  • 5์ผ์งธ : 6
  • 4์ผ์งธ : 4, 4, 4, 6
  • 3์ผ์งธ : 3, 4, 4, 4, 6
  • 2์ผ์งธ : 2, 3, 4, 4, 4, 6
  • 1์ผ์งธ : 1, 2, 3, 4, 4, 4, 6

๋’ค์ง‘๊ธฐ๋งŒ ํ–ˆ์„ ๋ฟ์ธ๋ฐ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ค„์–ด๋“  ๊ฒƒ์ด ๋ณด์ผ ๊ฒƒ์ด๋‹ค.

6์ผ์งธ์— ๊ฐ€์žฅ ์ ์ˆ˜๋ฅผ ์ตœ๋Œ€๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  5์ผ์งธ์—๋Š” ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณผ์ œ๊ฐ€ ์—†์œผ๋‹ˆ ๋„˜์–ด๊ฐ„๋‹ค.

4์ผ์งธ์—๋Š” ์ˆ˜ํ–‰ํ•œ ๊ณผ์ œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ณผ์ œ๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค.

์ฆ‰, ํ•˜๋ฃจํ•˜๋ฃจ ์ค„์—ฌ๊ฐ€๋ฉฐ ๊ทธ๋•Œ๊ทธ๋•Œ ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ์ฐพ์•„๋‚ด๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด์ œ ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ์ฐพ์•„๋‚ผ ๊ฒƒ์ด๋ƒ? ์ด๋‹ค.

๋‚˜๋Š” ๋‚ ์„ ์ค„์—ฌ๊ฐ€๋ฉด์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณผ์ œ์˜ ์ ์ˆ˜๋“ค์„ ์ตœ๋Œ€ํž™์— ๋„ฃ์–ด ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์–ธ์ œ๋“ ์ง€ ์ตœ๋Œ“๊ฐ’์„ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

PriorityQueue<Integer> heap = new PriorityQueue<>();

 

์œ„์˜ ์ฝ”๋“œ๋Š” ์ž๋ฐ”์—์„œ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ํž™์„ ์„ ์–ธํ•œ ๊ฒƒ์ด๋‹ค.

์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ์†Œํž™์ด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ํž™์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋„ฃ์–ด ์ฃผ๋Š” ๊ฐ’์— ์Œ์ˆ˜๋ฅผ ์ทจํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

int score = 0;
int idx = 0;
for(int day = assignments[0][0]; day > 0; day--) { //์ตœ๋Œ€ ๋งˆ๊ฐ ๊ธฐํ•œ์ด ๋จผ ๋‚ ๋ถ€ํ„ฐ
    while (idx < assignments.length && assignments[idx][0] >= day) { //๊ฐ€๋Šฅํ•œ ๊ณผ์ œ๋“ค์˜ ์ ์ˆ˜ ๋„ฃ๊ธฐ
        heap.offer(-assignments[idx][1]);
        idx++;
    }
    if(!heap.isEmpty()) {
        score -= heap.poll(); //์Œ์ˆ˜๋กœ ์ž…๋ ฅ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋นผ์ค€๋‹ค.
    }
}

 

๊ฐ€์žฅ ๋จผ ๋งˆ๊ฐ ๊ธฐํ•œ๋ถ€ํ„ฐ ํ•˜๋ฃจ์”ฉ ์ค„์—ฌ๊ฐ€๋ฉด์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณผ์ œ๋“ค์˜ ์ ์ˆ˜๋ฅผ ์ตœ๋Œ€ํž™์— ๋„ฃ๋Š”๋‹ค.

ํž™์ด ๋น„์–ด์žˆ์ง€ ์•Š๋Š” ํ•œ ํ•˜๋ฃจ์— ํ•œ๊ฐœ์˜ ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜๋ฅผ ๋นผ์„œ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•œ๋‹ค.

 

๊ทธ๋™์•ˆ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์•Œ๊ณ ๋Š” ์žˆ์—ˆ์ง€๋งŒ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•  ๋•Œ๊ฐ€ ๋งŽ์•˜๋‹ค.

์ด๋ฒˆ์—๋Š” ์ตœ๋Œ€ํž™์„ ์ด์šฉํ•˜์—ฌ ๋ณ€ํ•˜๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ ์ตœ๋Œ“๊ฐ’์„ ๋ฝ‘์•„๋‚ธ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋‚˜๋ฉด์„œ ๋ฟŒ๋“ฏํ–ˆ๋‹ค.

๋˜ํ•œ ์ €๋ฒˆ์— ์ •๋ฆฌํ–ˆ๋˜ ๋‚ด์šฉ์ด ๋ฆฌ๋งˆ์ธ๋“œ๋˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋”์šฑ ๋ฟŒ๋“ฏํ–ˆ๋‹ค.


๐Ÿ€ ํ’€์ด ๐Ÿ€

package Baekjoon;

import java.io.*;
import java.util.*;

public class Greedy13904 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        int[][] assignments = new int[n][2];

        StringTokenizer st;
        for(int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            assignments[i][0] = Integer.parseInt(st.nextToken());
            assignments[i][1] = Integer.parseInt(st.nextToken());
        }
        System.out.println(getMaxScore(assignments));
    }

    public static int getMaxScore(int[][] assignments) {
        //๋งˆ๊ฐ์ผ์ด ๋จผ ๊ฒƒ๋ถ€ํ„ฐ, ๊ฐ™์œผ๋ฉด ์ ์ˆ˜๊ฐ€ ๋†’์„ ๊ฒƒ๋ถ€ํ„ฐ ์ •๋ ฌ
        Arrays.sort(assignments, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o2[0] - o1[0] == 0) {
                    return o2[1] - o1[1];
                }
                return o2[0] - o1[0];
            }
        });

        PriorityQueue<Integer> heap = new PriorityQueue<>(); //์ตœ์†Œํž™์ด๋ฏ€๋กœ ์ ์ˆ˜๋ฅผ ์Œ์ˆ˜๋กœ ์ž…๋ ฅํ•œ๋‹ค.
        int score = 0;
        int idx = 0;
        for(int day = assignments[0][0]; day > 0; day--) {
            while (idx < assignments.length && assignments[idx][0] >= day) {
                heap.offer(-assignments[idx][1]);
                idx++;
            }
            if(!heap.isEmpty()) {
                score -= heap.poll(); //์Œ์ˆ˜๋กœ ์ž…๋ ฅ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋นผ์ค€๋‹ค.
            }
        }
        return score;
    }
}
728x90