본문 바로가기

Algorithm/CodeUp

[CodeUp_Java] Q1093 : [기초-종합] 이상한 출석 번호 부르기1

반응형

안녕하세요! Plitche(플리체)입니다.
이번 포스팅의 주제는 Q1093 : [기초-1차원배열] 이상한 출석 번호 부르기1 (자바, JAVA)입니다.

intro

Question

문제 설명

입력

첫 번째 줄에 출석 번호를 부른 횟수인 정수 n이 입력된다. (1 ~ 10000)
두 번째 줄에는 무작위로 부른 n개의 번호(1 ~ 23)가 공백을 두고 순서대로 입력된다.

출력

1번부터 번호가 불린 횟수를 순서대로 공백으로 구분하여 한 줄로 출력한다.

예시

  • 입력 :
    10
    1 3 2 2 5 6 7 4 5 9
  • 출력 :
    1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Solution (풀이)

  • 풀이 1 : 메모리 29924, 시간 218
public class Answer1 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();    // 총 부를 횟수
        int[] a = new int[24];    // 각 번호(1~23) 총 24명의 숫자만큼 배열 길이 선언

        for (int i = 0; i < n; i++) {
            int t = sc.nextInt();    // 어떤 번호를 불렀는지.
            a[t] += 1;    // 불린 번호의 index 값에 1 추가 하기
        }

        for(int i = 1; i <= 23; i ++) {
            System.out.print(a[i] + " ");    // 각 index별 총 불린 횟수 출력
        }

        sc.close();
    }
}

 

  • 풀이 2 : 메모리 12928, 시간 85
public class Answer2 {
    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()); // 총 부를 횟수
        String str = br.readLine();
        StringTokenizer st = new StringTokenizer(str, " ");

        int[] studentNo = new int[24]; // 각 번호(1~23) 총 24명의 숫자만큼 배열 길이 선언
        for (int i=0; i<n; i++) {
            studentNo[Integer.parseInt(st.nextToken())] += 1; // 불린 번호의 index에 1 추가 하기
        }
        for (int i=1; i< studentNo.length; i++) {
            sb.append(studentNo[i]).append(" "); // 각 index별 총 불린 횟수 출력
        }
        System.out.println(sb);
    }
}

지난 포스팅과 내용과 동일하게, 여러 데이터를 입력받을 때에는 Scanner보다 BufferedReader을 사용하는 것이 훨신 더 성능이 좋았습니다.

(심지어 숫자형으로 입력 받아야해서 매번 캐스팅을 해주더라도 성능이 좋았습니다.)

반응형