[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฒ ์ŠคํŠธ์•จ๋ฒ”/Java - Lv.3

2024. 10. 7. 23:11ยทCoding Test/Algorithms

โ“๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/42579?language=java

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 75.5 MB, ์‹œ๊ฐ„: 4.40 ms

๋ฌธ์ œ ์„ค๋ช…

์ŠคํŠธ๋ฆฌ๋ฐ ์‚ฌ์ดํŠธ์—์„œ ์žฅ๋ฅด ๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋‘ ๊ฐœ์”ฉ ๋ชจ์•„ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์„ ์ถœ์‹œํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋ž˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ๋…ธ๋ž˜๋ฅผ ์ˆ˜๋กํ•˜๋Š” ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์†ํ•œ ๋…ธ๋ž˜๊ฐ€ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
  2. ์žฅ๋ฅด ๋‚ด์—์„œ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
  3. ์žฅ๋ฅด ๋‚ด์—์„œ ์žฌ์ƒ ํšŸ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋…ธ๋ž˜ ์ค‘์—์„œ๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋ž˜์˜ ์žฅ๋ฅด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด genres์™€ ๋…ธ๋ž˜๋ณ„ ์žฌ์ƒ ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด plays๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์— ๋“ค์–ด๊ฐˆ ๋…ธ๋ž˜์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • genres[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜์˜ ์žฅ๋ฅด์ž…๋‹ˆ๋‹ค.
  • plays[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜๊ฐ€ ์žฌ์ƒ๋œ ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • genres์™€ plays์˜ ๊ธธ์ด๋Š” ๊ฐ™์œผ๋ฉฐ, ์ด๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์žฅ๋ฅด ์ข…๋ฅ˜๋Š” 100๊ฐœ ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค.
  • ์žฅ๋ฅด์— ์†ํ•œ ๊ณก์ด ํ•˜๋‚˜๋ผ๋ฉด, ํ•˜๋‚˜์˜ ๊ณก๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์žฅ๋ฅด๋Š” ์žฌ์ƒ๋œ ํšŸ์ˆ˜๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

genres plays return
["classic", "pop", "classic", "classic", "pop"] [500, 600, 150, 800, 2500] [4, 1, 3, 0]

โœ๐Ÿปํ’€์ด

์žฅ๋ฅด๋ณ„ ์ด ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•œ HashMap์„ ๊ตฌํ•จ.
pop์—๋Š” 1, 4๋ฒˆ์ด classic์—๋Š” 0, 2, 3 ๋ฒˆ์œผ๋กœ ๋‚˜๋ˆ”์œผ๋กœ์จ ๊ฐ ์žฅ๋ฅด๋ณ„๋กœ ์•จ๋ฒ”์„ ๋‚˜๋ˆ”.
์žฅ๋ฅด๋ณ„ ์ด ํšŸ์ˆ˜๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ด ํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์žฅ๋ฅด ์ˆœ์œผ๋กœ ์ •๋ ฌํ•จ.
๊ฐ ์žฅ๋ฅด๋ณ„๋กœ ์•จ๋ฒ”๋„ ์žฌ์ƒ ํšŸ์ˆ˜๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•จ.
์•จ๋ฒ” ์ค‘ ์žฌ์ƒํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๊ฒƒ์„ answer์— ์ถ”๊ฐ€. ์•จ๋ฒ”์˜ ์ˆ˜๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€.

๐Ÿ’ป์ฝ”๋“œ

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

class Solution {
    public int[] solution(String[] genres, int[] plays) {
        Map<String, Integer> cnt = new HashMap<>();
        Map<String, HashMap<Integer, Integer>> album = new HashMap<>();

        for(int i = 0; i < genres.length; i++){
            if(!cnt.containsKey(genres[i])){
                HashMap<Integer, Integer> m = new HashMap<>();
                m.put(i, plays[i]);
                album.put(genres[i], m);
                cnt.put(genres[i], plays[i]);
            } else {
                album.get(genres[i]).put(i, plays[i]);
                cnt.put(genres[i], cnt.get(genres[i]) + plays[i]);

            }
        }

        List<String> keySet = new ArrayList<>(cnt.keySet());
        keySet.sort((o1, o2) -> cnt.get(o2) - (cnt.get(o1)));
        List<Integer> answer = new ArrayList();

        for(String i : keySet) {
            HashMap<Integer, Integer> map = album.get(i);
            List<Integer> key = new ArrayList(map.keySet());

            key.sort((o1, o2) -> map.get(o2) - (map.get(o1)));

            answer.add(key.get(0));
            if(key.size() > 1) // ํ˜„์žฌ ์žฅ๋ฅด์˜ ์•จ๋ฒ” ์ˆ˜๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ์ถ”๊ฐ€.
                answer.add(key.get(1));
        }

        return answer.stream().mapToInt(i -> i).toArray();
    }
}

๐Ÿ’ก์ƒˆ๋กœ ๋ฐฐ์šด ๋‚ด์šฉ

List ๋žŒ๋‹คํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌ

  • ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ List.sort((o1, o2) -> map.get(o1) - (map.get(o2)))
  • ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ List.sort((o1, o2) -> map.get(o2) - (map.get(o1)))

์ŠคํŠธ๋ฆผ

  • ์ปฌ๋ ‰์…˜, ๋ฐฐ์—ด ๋“ฑ์— ์ €์žฅ๋œ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ฐธ์กฐํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ.
  • ๋ถˆํ•„์š”ํ•œ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋žŒ๋‹ค์‹์„ ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ง๊ด€์ ์ด๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.

์ŠคํŠธ๋ฆผ ์ค‘๊ฐ„ ์—ฐ์‚ฐ

  • filter(Predicate predicate): ์ฃผ์–ด์ง„ ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๋งŒ ์„ ํƒ.
  • map(Function<T, R> mapper): ๊ฐ ์š”์†Œ๋ฅผ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜.
  • flatMap(Function<T, Stream> mapper): ๊ฐ ์š”์†Œ๋ฅผ ์—ฌ๋Ÿฌ ์š”์†Œ๋กœ ํ™•์žฅํ•˜๊ณ  ํ‰ํƒ„ํ™”.
  • distinct(): ์ค‘๋ณต๋œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐ.
  • sorted(): ์š”์†Œ๋ฅผ ๊ธฐ๋ณธ ์ •๋ ฌ ์ˆœ์„œ๋กœ ์ •๋ ฌ.
  • peek(Consumer action): ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋™์ž‘ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜.

์ŠคํŠธ๋ฆผ ์ตœ์ข… ์—ฐ์‚ฐ

  • forEach(Consumer action): ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋™์ž‘์„ ์ˆ˜ํ–‰.
  • toArray(): Stream์˜ ์š”์†Œ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜..
  • reduce(BinaryOperator accumulator): ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์ถ•์†Œ
  • collect(Collector<T, A, R> collector): Stream์˜ ์š”์†Œ๋“ค์„ ์ปฌ๋ ‰์…˜์œผ๋กœ ์ˆ˜์ง‘.
  • min(Comparator comparator): Stream์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ๊ธฐ.
  • max(Comparator comparator): Stream์˜ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ๊ธฐ.
  • count(): Stream์˜ ์š”์†Œ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜.
  • anyMatch(Predicate predicate): ์ฃผ์–ด์ง„ ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š”์ง€ ํ™•์ธ.
  • allMatch(Predicate predicate): ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธ.
  • noneMatch(Predicate predicate): ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธ.
  • findFirst(): Stream์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜.
  • findAny(): Stream์˜ ์•„๋ฌด ์š”์†Œ๋‚˜ ๋ฐ˜ํ™˜.
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Coding Test > Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฐ€์žฅ ํฐ ์ˆ˜/Java - Lv.2  (0) 2024.10.10
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ด์ค‘์šฐ์„ ์ˆœ์œ„ํ/Java - Lv.3  (1) 2024.10.10
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜/Java - Lv.1  (0) 2024.10.06
[๋ฐฑ์ค€] 14889.์Šคํƒ€ํŠธ์™€ ๋งํฌ/Java - Silver1  (1) 2024.09.29
[๋ฐฑ์ค€] 15649.N๊ณผ M (1)/Java - Silver3  (0) 2024.09.29
'Coding Test/Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฐ€์žฅ ํฐ ์ˆ˜/Java - Lv.2
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ด์ค‘์šฐ์„ ์ˆœ์œ„ํ/Java - Lv.3
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜/Java - Lv.1
  • [๋ฐฑ์ค€] 14889.์Šคํƒ€ํŠธ์™€ ๋งํฌ/Java - Silver1
The Engineer, Lucy
The Engineer, Lucy
  • The Engineer, Lucy
    Growing up for My Future๐Ÿ’•
    The Engineer, Lucy
    • Instagram
    • GitHub
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (185)
      • Linux (26)
      • Infra (9)
      • Cloud (26)
        • AWS (2)
        • GCP (4)
        • Docker (4)
        • Kubernetes (14)
        • IaC (2)
      • NGINX (1)
      • DevOps (3)
      • Computer Science (17)
        • Data Structure (0)
        • Algorithms (1)
        • Operating System (3)
        • Network (11)
        • Database System (2)
      • Coding Test (97)
        • Algorithms (89)
        • SQL (7)
      • ETC (6)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๊ณต์ง€์‚ฌํ•ญ

  • ๋งํฌ

    • Lucy's Instagram
    • Lucy's GitHub
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
    ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 2๊ธ‰
    K8s
    Baekjoon
    ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค
    Java
    ์˜ค๋ธ”์™„
    network
    Kubernetes
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณต๋ถ€
    ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    Shell
    ์‰˜ ์Šคํฌ๋ฆฝํŠธ
    ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰
    cs ๊ธฐ์ดˆ ์ง€์‹ ์ •๋ฆฌ
    ๋ฐฑ์ค€
    Shell Script
    terraform
    ์ž๋ฐ”
    ๋ฆฌ๋ˆ…์Šค
    dfs
    ๋„คํŠธ์›Œํฌ
    docker
    Linux
    ๋„คํŠธ์›Œํฌ ๊ธฐ์ดˆ ์ง€์‹
    ๋„์ปค
    bfs
    programmers
    ์…ธ ์Šคํฌ๋ฆฝํŠธ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
The Engineer, Lucy
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฒ ์ŠคํŠธ์•จ๋ฒ”/Java - Lv.3
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”