[java]단어 정렬 - 백준1181

문제



풀이

문제 해석을 하자면,

  • 중복없이 문제에서 주어진 조건에 맞게 정렬하여 출력을 해야한다.


풀이

  • 문제의 난이도는 어렵지 않으나 “자료구조 사용과 정렬 커스텀“을 해볼 수 있는 좋은 문제이디ㅏ.
    • HashSet 자료구조로 입력을 받아서 중복을 방지했고,
    • Iterator 로 조회하여 String 배열로 값을 옮겼으며,
    • Arrays.sort 정렬을 오버라이딩 하여 조건에 맞게끔 수정했다.



코드

public static void main(String[] args) throws IOException {
    StringBuilder sb = new StringBuilder();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int N = Integer.parseInt(br.readLine());
    HashSet set = new HashSet<>();
    for(int i=0; i<N; i++){
        String input = br.readLine();
        set.add(input); // 중복불가
    }
    //run
    String[] outArr = new String[N + 1];
    Iterator iter = set.iterator();
    int idx = 0;
    while(iter.hasNext()){
        outArr[idx++] = iter.next().toString();
    }
    Arrays.sort(outArr, 0, idx, (o1, o2) -> {
        if(o1.toString().length() == o2.toString().length()) {
            return o1.toString().compareTo(o2.toString());
        }else {
            return o1.toString().length() - o2.toString().length(); //asc
        }
    });
    for(int i=0; i<idx;i++){
        sb.append(outArr[i]).append("\n");
    }
    System.out.println(sb);
}



느낀점

생략

댓글남기기