TIL - 21.01.31

1 minute read

자료구조

| Collection / Map | 순서 | 중복 | 종류 | | —————- | ——————————- | ——————– | ——————————————- | | List | 있음 | 가능 | Vector, ArrayList, LinkedList | | Set | 있음 | 불가능 | HashSet, Linked HashSet, SortedSet, TreeSet | | Map | Key와 Value 값
순서 유지 X | 키 중복 X, 값 중복 O | HashTable, HashMap, SortedMap, TreeMap |

알고리즘 문제의 다음 조건을 만족하는 자료 구조를 생각하며 TreeMap을 사용하게 되었다.

  1. 중복을 제거
  2. 글자 수가 적은 순서
  3. 알파벳이 빠른 순서
public class N1181 {

    public static TreeSet<Word> arr = new TreeSet<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int N = Integer.parseInt(br.readLine());
        for (int i = 0; i < N; i++) {
            arr.add(new Word(br.readLine().trim()));
        }
        Iterator<Word> it = arr.iterator();
        while (it.hasNext()) {
            sb.append(it.next().str).append("\n");
        }
        System.out.println(sb);

    }

    private static class Word implements Comparable<Word> {
        private Integer length;
        private String str;

        public Word(String str) {
            this.length = str.length();
            this.str = str;
        }

        @Override
        public int compareTo(Word o) {
            if (this.length < o.length) {
                return -1;
            } else if (this.length == o.length) {
                    return this.str.compareTo(o.str); //동일한 단어라면 0이 리턴되고 중복이 제거되고 저장된다. 그리고 알파벳 순서로 정렬됨
            } else {
                return 1;
            }
        }
    }
}

활용

REF

  • https://lktprogrammer.tistory.com/174
  • https://codechacha.com/ko/java-string-compare/