[BOJ] 2577번 숫자의 개수 - JAVA

최영환·2022년 9월 24일
0

BaekJoon

목록 보기
6/87
post-thumbnail
## Java 풀이 시 유의사항 ##
클래스명은 Main 으로 작성해야함!

💡 문제

💬 입출력 예시

📌 풀이(소스코드)

// 풀이 1
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        String result = Integer.toString(a * b * c);
        int[] arr = new int[10];

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < result.length(); j++) {
                if (Character.forDigit(i, 10) == result.charAt(j)) {
                    arr[result.charAt(j) - '0']++;
                }
            }
        }

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        sc.close();
    }
}

// 풀이 2 (개선코드)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
	public static void main(String[] args) throws IOException {
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
		int[] arr = new int[10];
 
		int val = Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine());
 
		String str = String.valueOf(val);
 
		for (int i = 0; i < str.length(); i++) {
			arr[(str.charAt(i) - 48)]++;
		}
 
		for (int v : arr) {
			System.out.println(v);
		}
 
	}
}

📄 해설

  • 입력 받은 세 개의 수를 곱한 결과인 문자열 result 내에서 0 ~ 9 까지 탐색

  • Character.fotDigit() 메소드와 String.charAt() 메소드를 사용하여 같은 문자인지 비교 후 값 증가

  • 결과 배열인 arr 의 모든 값 출력

  • 풀이 2 는 구글에서 찾은 개선 코드. Scanner 보다 빠른 BufferedReader 를 사용하였으며, 중첩 반복문을 사용하지 않아 속도가 훨씬 빠르고, 메모리도 적게 사용함

  • 풀이 1 의 결과

  • 풀이 2 의 결과

profile
조금 느릴게요~

0개의 댓글