개발후라이
개발후라이
개발후라이
  • 분류 전체보기 (287)
    • Web Front End (76)
      • Javascript & Typescript (26)
      • React (12)
      • Vue (4)
      • Nodejs (1)
      • HTML (6)
      • CSS (8)
      • HTTP (6)
      • 책 - Review (8)
    • TIL (0)
    • Problem Solved (135)
      • 알고리즘 (4)
      • BOJ (67)
      • Programmers (8)
      • HackerRank (33)
      • LeetCode (23)
    • 회고 (4)
      • 오늘의 회고 (16)
      • 주간 회고 (15)
      • 월간 회고 (7)
      • WakaTime (9)
    • Git (3)
    • 기타 (15)
      • 취업 (5)
      • 자격증 (1)

블로그 메뉴

  • GitHub
  • LinkedIn
  • 홈

인기 글

태그

  • JavaScript
  • 릿코드
  • 노개북
  • 프론트엔드
  • 회고
  • 노마드북클럽
  • 개발자
  • TypeScript
  • 자바스크립트
  • 오늘의회고

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
개발후라이

개발후라이

Problem Solved/BOJ

[BOJ][Java] 1181번 - 단어 정렬

2019. 12. 20. 19:56
반응형

문제

백준 1181번 문제: 단어 정렬

문제 설명

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로
    정렬하고, 같은 단어는 한 번만 출력하는 문제

코드 풀이

1) HashMap에 단어들을 담는다. (words)
2) LinkedList에 HashMap의 메소드 중 하나인 entrySet을 사용해 key와 value를 모두 LinkedList로 넣는다. 여기서 entrySet에 의해 중복값이 걸러진다.
- 여기서 LinkedList를 사용하는 이유는 HashMap은 순서가 보장되지 않기 때문에 순서를 유지시키기 위해서이다.
3) Collections.sort에서 Comparator를 사용해 우선순위에 따라 다르게 정렬되도록 한다.
- 여기서 key는 문자열, value는 문자열의 길이이다.
- 따라서 value가 우선순위로 정렬되고, value가 같을 때 사전순으로 정렬되를 되도록 if문을 사용했다.
4) 정렬된 LinkedList의 key 값을 차례대로 출력한다.

성공 코드

import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;

public class BOJ1181 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        HashMap<String, Integer> words = new HashMap<>();

        for (int i = 0; i < n; i++) {
            String str = sc.next();
            words.put(str, str.length());
        }
        sc.close();
        List<Map.Entry<String, Integer>> answer = new LinkedList<>(words.entrySet());

        Collections.sort(answer, new Comparator<Map.Entry<String, Integer>>() {

            @Override
            public int compare(Entry<String, Integer> arg0, Entry<String, Integer> arg1) {
                if (arg0.getValue() == arg1.getValue())
                    return arg0.getKey().compareTo(arg1.getKey());
                return arg0.getValue() - arg1.getValue();
            }

        });
        for (int i = 0; i < answer.size(); i++)
            System.out.println(answer.get(i).getKey());
    }
}
반응형
저작자표시 (새창열림)
    'Problem Solved/BOJ' 카테고리의 다른 글
    • [BOJ][Java] 15649번 - N과 M (1)
    • [BOJ][Java] 10814번 - 나이순 정렬
    • [BOJ][Java] 1032번 - 명령 프롬프트
    • [BOJ][Java] 1100번 - 하얀 칸
    개발후라이
    개발후라이
    어제보다 오늘 발전하기 위한 공간 https://github.com/choisohyun

    티스토리툴바