[BOJ] 2577 숫자의 개수 (JAVA)

joyful·2021년 4월 8일
0

Algorithm

목록 보기
33/65

✅ 문제

세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

✅ 입력

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

✅ 출력

  • 첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다.
  • 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

✅ 예제 1

▼ 입력

150
266
427

▼ 출력

3
1
0
2
0
0
0
2
0
0

풀이

  • BufferedReader.readLine()으로 정수를 입력받는다.
  • a*b*c 값을 String.valueOf() 또는 Integer.toString() 을 이용하여 String 타입으로 변환한다. (택1)
  • 각 자리의 숫자를 저장할 배열과 숫자가 쓰인 횟수를 저장할 배열을 생성한다.
  • for문 이용
    - 문자열에서 각 자리의 숫자를 추출하여 배열에 저장
    - 숫자가 쓰인 횟수를 배열에 저장
    - 숫자를 char 타입으로 변환 후 BufferedWriter.write()를 이용하여 출력한다.
    • (char)(숫자 + '0')
      • 아스키코드값을 넘기기 때문에 '0'을 더해준다.
      • 강제 타입 변환(캐스팅)을 해준다.
      • 숫자가 0~9 사이인 경우 사용
    • Character.forDigit(숫자, 진법)
      • 실제 char 값을 얻을 수 있는 방법
      • 지정된 진법의 숫자를 문자로 표현
      • 진법 또는 숫자가 유효하지 않을 경우 null 반환
    • Integer.toString(숫자).charAt(0)
      • toString() : intString
      • charAt() : Stringchar
      • 굳이 쓸 필요가 있을까..?

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int a = Integer.parseInt(br.readLine());
		int b = Integer.parseInt(br.readLine());
		int c = Integer.parseInt(br.readLine());
		
		int val = a*b*c;	// 입력받은 값 곱하기
		
		// int → String
		String s = String.valueOf(val);	// 방법1
	//	String s = Integer.toString(val);	// 방법2
		
		int[] num = new int[s.length()];	// 추출한 각 자리의 숫자를 저장할 배열
		int[] cnt = new int[10];	// 추출한 숫자가 쓰인 횟수 저장할 배열
		
		for(int i=0; i<num.length; i++) {
			num[i] = s.charAt(i)-'0';	// 문자열에서 각 자리 수 추출
			cnt[num[i]]++;	// 추출한 숫자의 자리(cnt[추출한 값])에 횟수 증가
		}
		
		for(int i=0; i<cnt.length; i++) {
			// int → char
			bw.write((char)(cnt[i]+'0'));	// 방법1 
		//	bw.write(Character.forDigit(cnt[i], 10));	// 방법 2
		//	bw.write(Integer.toString(cnt[i]).charAt(0);	// 방법 3
			
			bw.newLine();
		}
		
		bw.flush();
		bw.close();
	}
}
profile
기쁘게 코딩하고 싶은 백엔드 개발자

0개의 댓글