우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»‍πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀

Eager To Learn 🌌

πŸ‘¨πŸ»‍πŸ’» PS/바킹독

[JAVA] λ°±μ€€ 13414번 【S3.μˆ˜κ°•μ‹ μ²­γ€‘

2023. 8. 29. 12:22

문제

 

13414번: μˆ˜κ°•μ‹ μ²­

μž…λ ₯ λ°μ΄ν„°λŠ” ν‘œμ€€ μž…λ ₯을 μ‚¬μš©ν•œλ‹€. μž…λ ₯은 1개의 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λ‘œ κ΅¬μ„±λœλ‹€. μž…λ ₯의 첫 번째 μ€„μ—λŠ” κ³Όλͺ©μ˜ μˆ˜κ°• κ°€λŠ₯ 인원 K(1 ≤ K ≤ 100,000)와 학생듀이 λ²„νŠΌμ„ ν΄λ¦­ν•œ μˆœμ„œλ₯Ό κΈ°λ‘ν•œ λŒ€κΈ°λͺ©

www.acmicpc.net


풀이

λ¨Όμ € 이 λ¬Έμ œλŠ”, μˆ˜κ°• 신청을 ν•œ 학생듀을 μˆœμ„œλŒ€λ‘œ μžλ£Œκ΅¬μ‘°μ— λ„£μ–΄μ•Ό ν•˜λŠ”λ°,

 

이미 κ·Έ μžλ£Œκ΅¬μ‘°μ— λ“€μ–΄κ°€ μžˆλŠ” 학생인 경우, 제일 λ’· μˆœμ„œλ‘œ λ‹€μ‹œ μ§‘μ–΄λ„£μ–΄μ•Ό ν•œλ‹€.

 

이 μ•„μ΄λ””μ–΄λŠ”, 이 문제λ₯Ό ν‘ΈλŠ” λˆ„κ΅¬λ‚˜ λ– μ˜¬λ Έμ„ν…λ°

 

생각보닀 κ°„λ‹¨ν•˜κ²Œ 풀릴 쀄 μ•Œμ•˜λŠ”λ° μ•„λ‹ˆμ—ˆλ‹€.

 

 

1️⃣ mapκ³Ό priority queue μ‚¬μš©

set을 μ΄μš©ν•΄μ„œ 쀑볡여뢀λ₯Ό 확인할 수 μžˆμ§€λ§Œ, μˆ˜κ°• μ‹ μ²­ μˆœμ„œλ₯Ό 확인할 순 μ—†λ‹€.

 

		HashMap<String, Integer> map = new HashMap<>();

        for (int i = 0; i < L; i++) {
            String id = br.readLine();
            if (map.containsKey(id)) {
                map.remove(id);
                map.put(id, i);
            } else {
                map.put(id, i);
            }
        }

 

λ”°λΌμ„œ, map을 μ΄μš©ν•΄μ„œ μˆ˜κ°• μ‹ μ²­ μˆœμ„œ μ •λ³΄κΉŒμ§€ ν•¨κ»˜ 넣을 수 μžˆλ‹€.

 

κ·Έλ ‡κ²Œ, map에 이미 μˆ˜κ°• μ‹ μ²­ 이λ ₯이 μžˆλŠ” ν•™μƒμ˜ 경우 μ‚­μ œν•˜κ³  λ‹€μ‹œ μž…λ ₯ν•΄μ£Όλ©΄ λœλ‹€.

 

map에 μˆœμ„œ 정보λ₯Ό λ„£μ—ˆμ§€λ§Œ, 정렬은 λ”°λ‘œ λΆˆκ°€λŠ₯ ν•˜λ―€λ‘œ

 

map에 μž…λ ₯된 μˆœμ„œμ— 따라 μ •λ ¬ν•˜κΈ° μœ„ν•΄, map에 μžˆλŠ” μ›μ†Œλ“€μ„ 순차적으둜 μš°μ„  μˆœμœ„ 큐에 λ„£μ—ˆλ‹€.

 

단, μš°μ„ μˆœμœ„ 큐에 집어넣을 λ•Œ μƒˆλ‘œμš΄ 클래슀λ₯Ό μ •μ˜ν•΄μ„œ μ •λ ¬ 쑰건과 ν•¨κ»˜ κ΅¬ν˜„ν•˜λ©΄ λœλ‹€.

 

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int K = Integer.parseInt(input[0]), L = Integer.parseInt(input[1]);
        HashMap<String, Integer> map = new HashMap<>();

        for (int i = 0; i < L; i++) {
            String id = br.readLine();
            if (map.containsKey(id)) {
                map.remove(id);
                map.put(id, i);
            } else {
                map.put(id, i);
            }
        }

        PriorityQueue<Student> pq = new PriorityQueue<>((a, b) -> a.idx - b.idx);
        for (String s : map.keySet()) {
            pq.offer(new Student(s, map.get(s)));
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < K; i++) {
            if (!pq.isEmpty()) {
                sb.append(pq.poll().id + "\n");
            }
        }
        System.out.println(sb);
    }

    static class Student {
        String id;
        int idx;

        public Student(String id, int idx) {
            this.id = id;
            this.idx = idx;
        }
    }
}

 

κ²°κ³Ό

 

2️⃣ LinkedHashSet μ‚¬μš©

이 문제λ₯Ό 더 μ‰½κ²Œ ν’€ 수 μžˆλŠ” 방법이 μ—†λ‚˜ 찾아보닀가 처음 μ•Œκ²Œλœ μžλ£Œκ΅¬μ‘°μ΄λ‹€.

 

set인데, μˆœμ„œλ₯Ό 보μž₯ν•΄μ£ΌλŠ” set이라고 ν•œλ‹€.

 

λ”°λΌμ„œ, 이 자료ꡬ쑰λ₯Ό μ•Œκ³  μžˆμ—ˆλ‹€λ©΄ μ •~~말둜 μ‰½κ²Œ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€.

 

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

public class Main2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int K = Integer.parseInt(input[0]), L = Integer.parseInt(input[1]);
        LinkedHashSet<String> set = new LinkedHashSet<>();

        for (int i = 0; i < L; i++) {
            String id = br.readLine();
            if (set.contains(id)) {
                set.remove(id);
                set.add(id);
            } else {
                set.add(id);
            }

        }

        StringBuilder sb = new StringBuilder();
        for (String id : set) {
            sb.append(id + "\n");
            if (--K == 0) {
                break;
            }
        }
        System.out.println(sb);
    }

}

 

κ²°κ³Ό

1번 방법 보닀 λ”°λ₯Έ μ‹œκ°„μœΌλ‘œ ν†΅κ³Όν•˜μ˜€λ‹€.

    'πŸ‘¨πŸ»‍πŸ’» PS/바킹독' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [JAVA] λ°±μ€€ 23326번 【G3.홍읡 νˆ¬μ–΄λ¦¬μŠ€νŠΈγ€‘
    • [JAVA] λ°±μ€€ 22939번 【G4.문제 μΆ”μ²œ μ‹œμŠ€ν…œ Version 1】
    • [JAVA] λ°±μ€€ 20166번 【G4.λ¬Έμžμ—΄ μ§€μ˜₯에 λΉ μ§„ ν˜Έμ„γ€‘
    • [JAVA] λ°±μ€€ 20366번 【G3.같이 λˆˆμ‚¬λžŒ λ§Œλ“€λž˜?】
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”