본문 바로가기

알고리즘

[백준] 2577번: 숫자의 개수(java, python)

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

 

2577번: 숫자의 개수

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

www.acmicpc.net


💡 주의 사항

결과값에 0부터 9까지 각 숫자가 몇 번 나오는지 출력해야 함


🗒 풀이

java

 

1) 나눗셈 사용하기

import java.util.Scanner;

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

        int[] quo = new int[10];
        int value = (sc.nextInt() * sc.nextInt() * sc.nextInt());

        while (value != 0) {
            quo[value % 10]++;
            value /= 10;
        }

        for (int q: quo) {
            System.out.println(q);
        }

        sc.close();
    }
}
  • quo라는 int 배열을 만들고, 0부터 9까지 저장할 수 있도록 크기는 10으로 정함
  • 입력받은 세 수를 곱한 value가 0이 될 때까지 while문을 사용하여, 10으로 나눈 값의 나머지를 배열 인덱스에 저장함. 만약 세 개의 숫자를 곱한 값이 27이고, 그 값을 10으로 나눈 몫은 7이 되므로 quo의 인덱스가 7인 항목을 1 증가시켜 주는 것
  • 마지막으로 forEach 문을 사용하여 quo에 저장된 값들을 한줄씩 출력

2) charAt 사용하기

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int value = (sc.nextInt() * sc.nextInt() * sc.nextInt());
        String str = Integer.toString(value);

        for (int i = 0; i < 10; i++) {
            int count = 0;
            for (int j = 0; j < str.length(); j++) {
                if ((str.charAt(j) - '0') == i) {
                    count++;
                }
            }
            System.out.println(count);
        }
        sc.close();
    }
}
  • 일단 계산한 값 value을 string으로 변환(Integer.toString(value))
  • for문을 두 번 돌리는데, 바깥쪽 for은 0부터 9까지 하나씩 증가시켜주는 것이고, 안쪽 for문은 string으로 반환된 str의 길이만큼 순환하는 것으로, str의 각 자리의 값을 charAt으로 확인하기 위함이다
  • 즉, if문에서 볼 수 있듯이 str.charAt(j) - '0'과 i (0 ~ 9) 하나하나 확인하고, count를 증가해서 출력함
  • 이 때, '0'을 빼는 이유는 빼지 않을 시, 아스키코드에 대응하는 문자가 나와 결과가 온통 0으로 출력됨 

python

from functools import reduce

arr = []
for i in range(3):
    arr.append(int(input()))
mul = str(reduce(lambda x, y: x * y, arr))

for i in range(10):
    print(mul.count(str(i)))
  • arr이란 배열을 만들어서 입력받은 수들 하나하나 넣어줌
  • functools의 reduce 함수를 사용해서 각 리스트의 값들을 하나하나 곱해준 것들 string으로 변환한다. java로 했을 때 방법 2와 비슷한 방식을 하기 위해서다.
  • 곱한 mul 함수에서 0부터 9까지 몇 개가 들어있는지 count함수를 이용하여 값을 구한 것을 출력한다. 이 때, 매개변수로도 문자열이 들어가야하므로, i에 string 변환을 해준 것을 확인할 수 있다