[백준] 1811번 : 단어 정렬
문제
느낀점
모르겠을 땐, 바로 해답을 찾아보지 않더라도 문제해결을 위해 반드시 필요한 개념은 찾아보면서 하는 게 좋을 것 같다. 오히려 필수개념을 지금은 숙지하고 이해하는 것에 시간을 쏟는 게 나을 듯 싶다. 혼자 고민해서 문제가 바란 방향과 달리 가는 게 그리 좋은 방법은 아닌 것 같다. (특히 개념 숙지가 부족한 지금은 재료를 더 쌓을 때이다)
아니 이렇게 풀린다고?
필요한 개념이 꽤 어려워서 아래 달아놓은 블로그들의 정리 내용을 이해하고 다시 풀어보려고 한다.
필수개념
이번 문제는 기본적으로 Array.sort() 메소드와 compare메소드를 정확히 이해하고 있어야 풀 수 있는 문제이다. 나는 정확히 이해하고 있지 못했기에 참 어렵게 어렵게 풀려고 하다가 못 풀었다.
깨고 부딪힌 흔적
package december_first;
import java.util.List;
import java.util.HashMap; // 꼭 넣어주기
import java.util.LinkedList;
import java.util.Map; // 꼭 넣어주기
import java.util.Scanner;
public class baek_1181 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
//sc.next(); ?
// 인덱스, 단어 해쉬맵 생성
Map<Integer, String> map = new HashMap<>();
// 인덱스, 단어 해쉬맵 입력
for (int i = 0; i < num; i++) {
map.put(i, sc.next()); // 왜 sc.nextLine()로 하면 안 됐지?
}
sc.close();
// 인덱스, 단어길이 해쉬맵 생성 (인티저, 인티저 주의)
Map<Integer, Integer> lengthMap = new HashMap<>();
System.out.println(map.get(0));
// 인덱스, 단어길이 해쉬맵 입력
for (int i = 0; i < num; i++) {
lengthMap.put(i, map.get(i).length());
System.out.println(lengthMap.get(i));
}
// 단어길이 해쉬맵 value순으로 오름차순 정렬
List<Map.Entry<Integer, Integer>> entryList = new LinkedList<>(lengthMap.entrySet());
entryList.sort(((o1, o2) -> lengthMap.get(o1.getKey()) - lengthMap.get(o2.getKey())));
for(Map.Entry<Integer, Integer> entry : entryList){
System.out.println("key : " + entry.getKey() + ", value : " + entry.getValue());
}
// 사진 1
// 인덱스, 단어 해쉬맵 생성
Map<Integer, String> result = new HashMap<>();
// 반복문 돌려서 단어길이 같은 게 있으면 map에서 단어 가져와서 비교해주기
for(int i = 0; i < num; i++) {
int num1 = 5;
if (entryList.get(i) == entryList.get(i+1)) {
num1 = map.get(i).compareTo(map.get(i+1));
}
if (num1 == 5) {
result.put(i, map.get(entryList.get(i)));
}
if (num1 == 1) {
}
}
}
}
사실 저기까지 푸는 것에 단어들의 갯수 순으로 나열해주는 것엔 성공했다.
그러나 문제는 바로 단어들의 갯수가 같을 때 사전순으로 정렬해주는 것이었다.
단어들의 갯수가 한 번 같을 때는 어찌저찌 사전 순으로 정렬해줄 수 있다 해도, 단어들의 갯수가 계속 같을 때,
예를 들어 총 단어의 갯수가 4개인데
love
hope
you
make
이렇게 되어 있으면 love와 hope와 make는 계속 사전순으로 정렬해주어야 하는 것이 된다. 따라서 쉽지가 않다....
필수 개념 정리된 블로그
Comparable과 Comparator의 이해
https://st-lab.tistory.com/243
단어정렬 풀이
https://st-lab.tistory.com/112
유사문항인 좌표정렬 문제
https://st-lab.tistory.com/110#%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
이 분의 블로그에 들어가면 이 문제를 푸는 데 꼭 필요한 Arrays.sort()를 사용자에 의해 구현하는 방법이 나와 있다.
시간을 꽤 많이 들여야 하는 부분 같다. 이해를 다 하고 문제를 다시 풀어보자!!!
HashMap을 Value 기준으로 정렬하는 법
이 분 블로그에서 참고해서 문제를 풀었다.
Array.sort()에 대한 기본적인 정리
https://coding-factory.tistory.com/549
이 분 블로그에서 참고해서 sort()에 대해 알아보았다. 그러나 hashMap을 쓰는 것으로 방향을 바꾸면서 사용하진 않았다.
Author And Source
이 문제에 관하여([백준] 1811번 : 단어 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@letsbebrave/백준-1811번-단어-정렬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)