Algorithms 🚀/Baekjoon

[백준/2577번] 숫자의 개수

728x90

www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

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

www.acmicpc.net

 

풀이 🎉

코드 1

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int A = Integer.parseInt(br.readLine());
		int B = Integer.parseInt(br.readLine());
		int C = Integer.parseInt(br.readLine());
		
		String SUM = A * B * C + "";
		
		String[] arr = SUM.split("");
		int[] num = new int[arr.length];
		
		for(int i = 0; i < arr.length; i++) {
			num[i] = Integer.parseInt(arr[i]);
		}
		
		int[] cnt = new int[10];
		
		for(int i = 0; i < num.length; i++) {
			cnt[num[i]]++;
		}
		
		for(int i=0; i<cnt.length; i++) {
			System.out.println(cnt[i]);
		}
	}
}

처음에는 String 타입의 숫자를 잘라서 int 배열에 넣는 식으로 코드를 작성을 했다.

 

코드 2

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 A = Integer.parseInt(br.readLine());
		int B = Integer.parseInt(br.readLine());
		int C = Integer.parseInt(br.readLine());
		
		br.close();
		
		int[] counts = new int[10];
		int number = A * B * C;

		while(number > 0) {
			counts[number % 10]++;
			number /= 10;
		}
		
		for(int i=0; i<counts.length; i++) {
			System.out.println(counts[i]);
		}
	}
}

숫자를 10으로 나눈 나머지의 인덱스의 값을 1씩 올리는 코드이다.

또한, 1번 코드처럼 문자열 -> 숫자로 바꿀 필요도 없어서 코드가 훨씬 깔끔해졌다.

 

연산이 많아서인지 2번 코드가 메모리를 조금 더 사용하지만 큰 차이가 없기 때문에 2번 코드를 쓸 것 같다. ㅎㅎ..

728x90

'Algorithms 🚀 > Baekjoon' 카테고리의 다른 글

[백준/8958번] OX퀴즈  (0) 2021.02.16
[백준/3052번] 나머지  (0) 2021.02.02
[백준/1546번] 평균  (0) 2021.02.02
[백준/10818번] 최소, 최대  (0) 2021.02.01
[백준/1541번] 잃어버린 괄호 [Java]  (0) 2021.01.21