728x90
문제
첫 줄 : 단어 수 (N)
두 번째 줄 : String들 나옴
조건1 : 중복은 제거
조건2 : 글자길이 우선순위 정렬
조건3 : 글자길이 같을 시, 알파벳 순 우선정렬
문제 링크 : https://www.acmicpc.net/problem/1181
원리
1. LinkedList로 나열
2. HashMap에 각 단어저장 <Key, Value> = <단어, 단어길이>
3. getOrDefault(key값, default값) : 지정된 키에대한 값이 있을 땐 그 그 value값을, 없으면 default값을 반환
@Override
public V getOrDefault(Object key, V defaultValue) {
Node<K,V> e;
return (e = getNode(key)) == null ? defaultValue : e.value;
}
4. Map 클래스의 Entry<Key, Value> 인터페이스 : Map.Entry.getKey()와 getValue()호출로 키|밸류 값 반환가능
5. entrySet() : 키값과 밸류값 모두를 받을 때 사용.
List<Map.Entry<String, Integer>> entryList = new LinkedList<>(map.entrySet());
1) 키값으로 자동정렬
2) 밸류값으로 자동정렬
entryList.sort(Map.Entry.comparingByKey());
entryList.sort(Map.Entry.comparingByValue());
나의 코드
import java.io.*;
import java.util.*;
public class no1181 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
HashMap<String, Integer> map = new HashMap<>();
for(int i=0; i<T ; i++) {
String str = br.readLine();
int length = str.length();
map.put(str, map.getOrDefault(str, length));
}
List<Map.Entry<String, Integer>> entryList = new LinkedList<>(map.entrySet());
entryList.sort(Map.Entry.comparingByKey());
entryList.sort(Map.Entry.comparingByValue());
for(Map.Entry<String, Integer> entry:entryList) bw.write(entry.getKey()+"\n");
bw.close();
}
}
레퍼런스 코드
getOrDefault() 참고 링크 : https://junghn.tistory.com/entry/JAVA-Map-getOrDefault-%EC%9D%B4%EB%9E%80-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C
728x90
'알고리즘 저장소 (일반방식과 나만의 풀이) > JAVA' 카테고리의 다른 글
| [백준] no1929: 소수 구하기 (0) | 2023.01.09 |
|---|---|
| [백준] no2231: 분해합 (2) | 2023.01.08 |
| [백준] no10773: 제로 (0) | 2023.01.06 |
| [백준] no1085: 직사각형 탈출 (0) | 2023.01.06 |
| [백준] no1944: 프린터 큐 (0) | 2023.01.05 |