문제 풀이/Baekjoon Online Judge
[Baekjoon Online Judge] 2577번: 숫자의 개수
hyeonic
2021. 1. 3. 20:47
[Baekjoon Online Judge] 2577번: 숫자의 개수
2577번: 숫자의 개수
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.
www.acmicpc.net
A, B, C의 숫자 세개를 곱하여 각 자리수가 몇 개 나온지 count 하는 문제이다. 해결 방법은 int 배열과 Map을 사용한 두 가지 방법으로 하였다.
import java.io.*;
public class Baekjoon2577 {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
int[] numbers = new int[10]; // 0 ~ 9가 나온 횟수를 저장하는 int 배열
int a = Integer.parseInt(bufferedReader.readLine());
int b = Integer.parseInt(bufferedReader.readLine());
int c = Integer.parseInt(bufferedReader.readLine());
String number = String.valueOf(a * b * c);
for (int i = 0; i < number.length(); i++) {
++numbers[Character.getNumericValue(number.charAt(i))];
}
for (int i : numbers) {
bufferedWriter.write(i + "\n");
}
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
}
}
나올 수 있는 숫자가 0 ~ 9로 한정되어 있기 때문에 int 배열의 크기를 10으로 고정할 수 있었다. 각 배열은 나온 수만큼 채워진다. 나온 숫자가 1이라면 1번 index의 값을 하나 증가 시킨다. 연산이 모두 끝났다면 int 배열을 줄바꿈과 함께 출력하여 마무리한다.
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class Baekjoon2577_1 {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
Map<Character, Integer> numberMap = new HashMap<>();
int a = Integer.parseInt(bufferedReader.readLine());
int b = Integer.parseInt(bufferedReader.readLine());
int c = Integer.parseInt(bufferedReader.readLine());
String stringNumber = String.valueOf(a * b * c);
for (int i = 0; i < stringNumber.length(); i++) {
char charNum = stringNumber.charAt(i);
if (numberMap.containsKey(charNum)) {
numberMap.put(charNum, numberMap.get(charNum) + 1);
} else {
numberMap.put(charNum, 1);
}
}
for (int i = 0; i < 10; i++) {
char charNum = Character.forDigit(i, 10);
if (numberMap.containsKey(charNum)) {
bufferedWriter.write(numberMap.get(charNum) + "\n");
} else {
bufferedWriter.write("0\n");
}
}
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
}
}
두 번째 방법은 새로운 수가 나올 때마다 해당 값을 Character 타입의 key로 Map에 저장하였다. 이미 있는 key값이면 해당 key의 value를 1씩 더해주고, 없다면 value를 1로 추가한다. 그 후 0 ~ 9까지 for 문을 돌며 Map에 key가 있으면 value를 출력하고, 없다면 0을 출력하여 마무리 하였다.