중복 빼고 정렬하기

이윤설·2024년 3월 15일
0

제출코드

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));
        int repetition = Integer.parseInt(br.readLine());
        String numbers = br.readLine();

        StringTokenizer st = new StringTokenizer(numbers, " ");

        List<Integer> temp = new ArrayList<>();

        while (st.hasMoreTokens()) {
            String token = st.nextToken();
            temp.add(Integer.parseInt(token));
        }

        Set<Integer> set = new HashSet<>();
        for (int number : temp) {
            set.add(number);
        }

        List<Integer> answer = new ArrayList<>();

        for (int num : set) {
            answer.add(num);
        }
        Collections.sort(answer);


        /**
         * 1. 정수를 출력할 때 write(int c) 사용하면 정수 c를 유니코드 문자로 변환하여 출력한다.
         * 2. 따라서 정수 값을 문자열을 출력할 땐 String.valueOf(num)을 통해 정수를 문자열로 변환한 후 출력해야 함.
         * 3. bw.flush()는 모든 출력 작업이 끝난 후 딱 한번만 호출하는 것이 효율적이다.
         */

//        try(BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out))) {
//            for (int num : answer) {
//                bw.write(num);
//                bw.flush();
//            }
//            br.close();
//        }

        try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out))) {
            for (int i = 0; i < answer.size(); i++) {
                bw.write(String.valueOf(answer.get(i)));
                if (i < answer.size() - 1) {
                    bw.write(" ");
                }
            }
            bw.flush();
            br.close();
        }
    }
}

모범답안

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));
        String numbers = br.readLine();

        StringTokenizer st = new StringTokenizer(numbers, " ");
        Set<Integer> set = new HashSet<>();

        while (st.hasMoreTokens()) {
            set.add(Integer.parseInt(st.nextToken()));
        }

        List<Integer> answer = new ArrayList<>(set);
        Collections.sort(answer);

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        for (int i = 0; i < answer.size(); i++) {
            bw.write(String.valueOf(answer.get(i)));
            if (i < answer.size() - 1) {
                bw.write(" ");
            }
        }
        bw.flush();
        br.close();
        bw.close();
    }
}

배운점

  • 만약 배열 [1,2,2,3,3]을 Set에 담고자 할때, 곧바로 set에 담으면 [1,2,3]으로 들어간다. 당연한건데 왜 리스트에 넣은거지???????????????????????
  • bw.write(정수)를 하면 정수의 유니코드를 출력한다. 따라서 bw.write(String.valueOf(정수))형태로 출력해야 한다.
  • 모든 작업이 끝난 후 bw, br 모두 flush, close 해야한다.
profile
화려한 외면이 아닌 단단한 내면

0개의 댓글