Search
Duplicate
📒

[Baekjoon] 01-02. 영단어 암기는 괴로워

상태
완료
수업
Algorithm Solving
주제
Baekjoon
4 more properties
참고

문제해설

NOTE
입력 값 ⇒ N(영어단어 개수), M(해당 값의 길이이상 단어만 기록한다), N개의 문자열
출력 값 ⇒ 단어장에 기록된 단어목록

문제 로직고민

NOTE
M 길이 이상의 단어들을 Map자료구조에 저장한다.
1.
자주 나오는 단어의 경우 Map의 value로 카운팅을 진행하며 체크한다.
2.
만약 value가 같다면 길이로 확인한다.
3.
길이 마저 같다면 기존의 String 정렬 방식으로 정렬한다.

작성코드

NOTE
public class _20920 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringBuilder sb = new StringBuilder(); String[] s; s = br.readLine().split(" "); int N = Integer.parseInt(s[0]); int M = Integer.parseInt(s[1]); Map<String, Integer> map = new HashMap(); for(int i =0; i<N; i++){ String line = br.readLine(); if(line.length() >= M && map.containsKey(line)) map.put(line, map.get(line) + 1); else if(line.length() >= M) map.put(line, 1); } List<Map.Entry<String,Integer>> list = new ArrayList(map.entrySet()); Collections.sort(list, (e1, e2) -> { if(!e1.getValue().equals(e2.getValue())) return Integer.compare(e2.getValue(), e1.getValue()); else if(e1.getKey().length() != e2.getKey().length()) return Integer.compare(e2.getKey().length(), e1.getKey().length()); else return e1.getKey().compareTo(e2.getKey()); }); for(Map.Entry entry : list){ bw.write(entry.getKey().toString() + "\n"); } bw.flush(); } }
Java
복사
Map을 사용해서 3가지의 정렬 조건을 모두 사용한다.

다른사람 풀이

NOTE
class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); TreeMap<String, Integer> map = new TreeMap<>((o1, o2) -> { if (o1.length() != o2.length()) return -(o1.length() - o2.length()); else return o1.compareTo(o2); }); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); for (int i = 0; i < N; i++) { String word = br.readLine(); if (word.length() < M) continue; if (map.containsKey(word)) map.put(word, map.get(word) + 1); else map.put(word, 0); } List<String> result = new ArrayList<>(map.keySet()); result.sort((o1, o2) -> -(map.get(o1) - map.get(o2))); for (String s : result) sb.append(s).append("\n"); System.out.println(sb); } }
Java
복사
TreeMap을 사용해서 기본 정렬조건을 제시해주고, 이후에 따로 리스트변환 이후 값을 정렬해주었다. (정렬조건을 따로 계산했는데 왜 되는지는 잘 모르겠음)