알고리즘/정렬

[백준] 1181번 단어정렬 자바(Java)

park-walnut 2024. 12. 26. 00:23

문제


솔루션


import java.io.*;
import java.util.*;

public class  Main{
    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 num = Integer.parseInt(br.readLine());

        Map<Integer, ArrayList<String>> dict = new HashMap<>();
        JUMP: for (int i = 0; i < num; i++) {
            String s = br.readLine();
            Integer length = s.length();
            ArrayList<String> stringList;
            if (dict.containsKey(length)) {
                stringList = dict.get(length);
                Iterator<String> iterator = stringList.iterator();
                while (iterator.hasNext()) {
                    String next = iterator.next();
                    if (next.equals(s)) {
                        continue JUMP;
                    }
                }
            } else {
                stringList = new ArrayList<>();
            }

            stringList.add(s);
            dict.put(s.length(), stringList);
        }
        ArrayList<Integer> keySet = new ArrayList<>(dict.keySet());
        Collections.sort(keySet);

        Iterator<Integer> it = keySet.iterator();
        while (it.hasNext()) {
            ArrayList<String> strings = dict.get(it.next());
            if (strings.size() == 1) {
                bw.write(strings.get(0) + "\n");
                bw.flush();
            } else {
                Collections.sort(strings);
                for (int i = 0; i < strings.size(); i++) {
                    bw.write(strings.get(i) + "\n");
                    bw.flush();
                }
            }

        }

    }
}

실행 결과


오후 5:29:53: Executing ':Main.main()'...

> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours

> Task :Main.main()
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate

트러블슈팅


  • 이슈 1
    • 문제
      • while문 안에 while문이 존재할때 바깥 while문으로 continue를 실행하여야 하는 상황
    • 해결
      • 자바의 'goto 문' 사용
JUMP:for(int i=0; i<10; i++){
		while(true){
					break JUMP;
				}
}

개선방향


  • Stringbuilder
    • 출력 IO 횟수 감소
  • HashSet
    • 중복된 단어 자동 제거