본문 바로가기

알고리즘/백준

[2577]숫자의 개수

수행일자 : 2021.07.24


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

 

2577번: 숫자의 개수

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

www.acmicpc.net


문제

  • 세 개의 자연수 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번 쓰였다.

입력

  • 첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.

출력

  • 첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.

입출력 예제


BufferedReader 와 배열 그리고 charAt 메소드를 사용해서 문제를 풀어보려고 한다.

charAt() 메소드는 index 값을 이용해서 문자열에서 문자를 뽑는 함수이다.단 해당 메소드의 결과값은 문자 형태로 return 되므로 int 형으로 형변환을 해주어야한다.

 

선언할 변수 목록은 다음과 같다.

  • 0~9까지 총 10개의 숫자를 비교하기 위한 배열 arr를 선언한다.
  • 세 수를 입력받아 곱한 결과값을 저장할 변수 value를 선언한다.
  • int형인 value 값을 String으로 변환하기 위한 변수 result를 선언한다.
    • charAt() 메소드를 사용하기 위해 String 형으로 변환이 필요하기 때문이다.

 for문을 통해  result의 각 수를  arr 배열에 넣어준다. 그리고 인덱스를 하나씩 추가해준다.해당 반복문은 각 숫자가 몇번씩 쓰였는지에 대한 로직이다.

  • charAt() 메소드는 아스키 코드 값으로 결과값을 return 하기 때문에 이 값을 우리가 아는 정수로 바꿔주기 위해서 ['0'] 또는 [48] 이라는 값을 빼 주어야 한다.
  • 문자 '0' 의 아스키코드값은 48로, 이 값을 빼주면 각 문자의 아스키코드값 - 문자 '0'의 아스키코드값을 통해 우리가 아는 정수의 형태로 결과값이 출력된다.

arr 배열에 값을 넣어준 후에 향상된 for문을 사용해서 arr 배열에서 차례대로 값을 꺼내서 val에 넣어준다.

  • 향상된 for문이란 for each문의 형식을 말하는 것으로, for(변수타입 변수이름 : 배열이름) { } 의 형태를 가지고 있다.
  • 배열의 항목 수만큼 반복하는 것으로 배열의 항목들을 순서대로 꺼내서 변수에 자동으로 대입해준다.

여기에서 변수 val은 arr 배열에 들어간 각 숫자가 몇 번 쓰였는지에 대한 값을 저장하는 변수이므로 해당 변수를 출력해주면 된다.

 

답안 소스

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

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int arr[] = new int[10];
		int value = Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine());
		String result = String.valueOf(value);
		
		for(int i=0; i<result.length(); i++) {
			arr[(result.charAt(i) - '0')]++;
		}
		
		for(int val : arr) {
			System.out.println(val);
		}
	}
}

'알고리즘 > 백준' 카테고리의 다른 글

[1546]평균  (0) 2021.08.01
[3052]나머지  (0) 2021.07.27
[2562]최댓값  (0) 2021.07.22
[10818]최소, 최대  (0) 2021.07.21
[1110]더하기 사이클  (0) 2021.07.17