• Home

My Codegate

  • Home

백준 2910 빈도 정렬 자바 문제풀이

2023/12/19 Posted by Codegate Java No Comments

문제 링크

문제 내용은 문자열을 받은 뒤 빈도 수에 따라 출력으로 깔아주면 되는데, 빈도 수가 동일할 경우에는 먼저 들어온 값이 우선해서 나가야 한다.

첫째 줄에 있는 두 번째 값은 N 이하의 숫자만 들어온다고 하는데 로직 상 아무 의미가 없기 때문에 들어오는 숫자 갯수만 봐주면 되겠다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class Main {

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

    int[] arr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();

    LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>();
    for (int i : arr) {
      map.merge(i, 1, Integer::sum);
    }

    List<Entry<Integer, Integer>> entries = new ArrayList<>(map.entrySet());
    entries.sort(Map.Entry.comparingByValue(Comparator.reverseOrder()));

    StringBuilder sb = new StringBuilder();
    for (Map.Entry<Integer, Integer> entry : entries) {
      int val = entry.getValue();
      for (int i = 0; i < val; i++) {
        sb.append(entry.getKey()).append(" ");
      }
    }

    System.out.println(sb.substring(0, sb.length() - 1));

  }

}

문제를 풀어보자면, 먼저 입력받은 값들의 빈도 수를 확인해야 하기 때문에 중복이 되지 않는 Map을 사용해서 빈도에 해당하는 Value만 1씩 늘려 나가면서 삽입하되, 삽입 순서대로 순서를 보장해주는 LinkedHashMap을 사용해주자

이후에는 Map에 담았던 내용을 List<Entry>> 형태로 옮겨 담아준 후 Entry의 값을 기준으로 정렬시켜주면
Map의 Value 순, 삽입 순으로 정렬이 되게 되는데

이후에는 list를 돌려 값을 꺼내주면서 빈도 수 만큼 StringBuilder에 붙여주면 되고 이후 StringBuilder에 모두 붙여주고 난 뒤에는 맨 끝에 공백 붙어있는지 확인하고 제거해준 후 출력해주면 끝이다.

No Comments
0

Leave a Reply Cancel Reply

Introduction

My Codegate

Latest Posts

  • Google Search Console API 연동방법
  • 인텔리제이 Gradle Dependency 최신 버전 보는 방법
  • Wallet-Tracker 개발일지
  • Moralis API 자바로 호출방법
  • IntelliJ Commit 후 Push 따로 하는 방법

Categories

  • My Project (4)
  • Java (42)
  • Algorithm (161)
    • Java (152)
    • Algorithm Knowledge (3)
    • Algorithm site usage (6)
  • Vue.js (1)
  • Spring (4)
  • Docker (2)
  • IntelliJ (20)
  • Uncategorized (7)

Recent Comments

  • Codegate on Hello world!
  • A WordPress Commenter on Hello world!

© 2025 — mycodegate.com

Prev Next