본문 바로가기
코딩공부/백준 (java)

[백준 2577] 숫자의 개수 (java)

by CodingKwon 2021. 7. 5.

문제 링크

https://www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.

www.acmicpc.net

 

 

나의 코드 (java)

import java.util.Scanner;

public class Main {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);

        // 입력 값 개수
        int n = 3;
        // 배열 생성
        int arr[] = new int[n];

        for (int i=0; i<n; i++){
            arr[i] = sc.nextInt();
        }

        // 숫자의 쓰임을 확인할 배열
        int arr2[] = new int[10];
        // 입력 받은 세 숫자의 곱
        int abc = arr[0] * arr[1] * arr[2];

        while (true){
            // 반복문을 종료할 조건
            if (abc == 0){
                break;
            }
            // 나머지에 해당하는 배열 카운트 증가
            arr2[abc % 10] += 1;
            // 10씩 나눠가며 숫자를 줄임
            abc = abc / 10;
        }

        // 결과
        for (int i=0; i<10; i++){
            System.out.println(arr2[i]);
        }
    }
}

 

이 문제의 핵심은 while문에서 세 수의 곱인 abc % 10으로 마지막 자리의 숫자가 어떤 것인지 검증하는 것입니다.

 

예를 들어 627이라는 값이라면 첫 번째 while에서 7을 찾아서 arr2[7]에 +1을 해줄 것입니다.

그리고 abc = abc / 10; 에서 627을 62로 바꿀 것입니다.

다음 while문에서 62에 2를 찾아서 arr2[2]에 값을 +1을 하고 abc를 10을 나누어 6이라는 값으로 만들어 줄 것입니다.

다음 while에서 6%10을 통해서 6을 찾고 arr2[6]에 값을 +1 하고 abc를 10으로 나누어 0이라는 값을 만들어 줍니다.

다음 while문에서 if문에 걸려서 break 되어 while문을 빠져나옵니다.

배열 arr2에 0부터 9까지를 돌면서 몇 번 카운팅 되었는지 출력합니다.

 

'코딩공부 > 백준 (java)' 카테고리의 다른 글

[백준 1546] 평균 (java)  (0) 2021.07.05
[백준 3052] 나머지 (java)  (0) 2021.07.05
[백준 2562] 최댓값 (java)  (0) 2021.07.05
[백준 10818] 최소, 최대 (java)  (0) 2021.07.05
[백준 1110] 더하기 사이클 (java)  (0) 2021.07.02

댓글