[伯俊]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
こちらのブログに入るとこの問題を解決するアリーユーザがsort()を実装する方法を以下に示す.
時間がかかる部分です.理解してから答えましょう.

HashMapをValueでソートする方法


https://velog.io/@cgw0519/Java-HashMap-Value-%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0
このブログで参考にして、問題を解決しました.

Array.sort()の基本定理


https://coding-factory.tistory.com/549
このブログでsort()を参考にして知りました.しかしhashmapは使わず、方向を変える.