알고리즘 풀이/백준(BOJ)

[JAVA/백준2577] 숫자의 개수 - 1차원 배열

닥스훈스 2019. 5. 20. 03:46

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

 

2577번: 숫자의 개수

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

www.acmicpc.net

1. 문제

 

2. 풀이

각 숫자의 빈도수를 저장할 1차원 배열을 만든다. 여기서 세 수를 곱한 정수값은 charAt()함수를 사용하기 위해 String으로 변환 하여 charAt(0)부터 끝까지 숫자를 추출하면서 해당하는 배열의 인덱스값을 하나씩 증가해준다.

 

3. 소스코드

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();
		int[] num = new int[10];

		String s = Integer.toString(a * b * c);

		for (int i = 0; i < s.length(); i++) {
			num[s.charAt(i) - '0']++;
		}
		for (int i = 0; i < num.length; i++) {
			System.out.println(num[i]);
		}
	}
}

 

여기서 charAt(i)-'0'을 해주는 이유는 정수로 바꿔주기 위해서인데, 숫자 char(0~9)은 ASCII코드 48부터 시작하므로 48을 빼주면 숫자를 얻을 수 있다. 즉 다음은 같은 표현이다.

 


 

★ char를 int로 변환하기(두가지 방법)

char a = '1';
int n = 0;
n = a-48;
char a = '1';
int n = 0;
n = a-'0';

 

★ ASCII 코드표