티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 2577번 숫자의 개수

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

 

2577번: 숫자의 개수

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

www.acmicpc.net

* 사용언어 : java, 자바

 

1. 문제

세 개의 자연수를 입력받아 곱한 결과에서

0부터 9까지 숫자가 각각 몇 번 쓰였는지 출력

 

2. 풀이

두 가지 방식으로 풀었습니다.

본인에게 편한 방식으로 이해하고 활용해보세요.

(두 가지 방식 다 크게 어렵지 않으니 모두 해보시는 것도 좋을 것 같습니다.)

 

1) % 연산자 이용

숫자를 10으로 나눈 나머지는 1의 자리의 수가 됩니다.

이렇게 나머지를 구하여 0~9 인덱스를 가지는 배열에 카운트를 더하고,

실제 숫자를 10으로 나눕니다.

그리고 while을 사용하여 나눈 숫자가 0보다 큰 동안 반복하여 진행하였습니다.

 

2) String 클래스 이용

아래 3개 함수를 활용하여, 문자열로 1글자씩 처리하였습니다.

- valueOf(number) : 해당 number를 String으로 변환하여 반환합니다.

- length() : 문자열의 길이를 반환합니다.

- charAt(index) : 해당 문자열의 index에 위치한 문자를 char 형으로 반환합니다.

 

3. 코드

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();
		sc.close();

		int[] counts = new int[10];
		int number = A * B * C;
		while (number > 0) {
			counts[number % 10]++;
			number /= 10;
		}
		for (int i = 0; i < counts.length; ++i) {
			System.out.println(counts[i]);
		}
	}
}

 

2)

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();
		sc.close();

		int[] counts = new int[10];
		String input = String.valueOf(A * B * C);
		for (int i = 0; i < input.length(); ++i) {
			counts[input.charAt(i) - '0']++;
		}
		for (int i = 0; i < counts.length; ++i) {
			System.out.println(counts[i]);
		}
	}
}

* char 형 문자를 int 형 정수로 변환하기 위해 '0' 을 빼주었습니다.

728x90
반응형
댓글