-
[Baekjoon Online Judge] 2577번: 숫자의 개수문제 풀이/Baekjoon Online Judge 2021. 1. 3. 20:47
[Baekjoon Online Judge] 2577번: 숫자의 개수
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을 출력하여 마무리 하였다.
'문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon Online Judge] 1152번: 단어의 개수 (0) 2021.01.04 [Baekjoon Online Judge] 8958번: OX퀴즈 (0) 2021.01.04 [Baekjoon Online Judge] 11720번: 숫자의 합 (0) 2021.01.03 [Baekjoon Online Judge] 2438번: 별 찍기 - 1 (0) 2021.01.03 [Baekjoon Online Judge] 1744번: 수 묶기 (0) 2021.01.02