[백준알고리즘: 1차원 배열 단계 > 3. 숫자의 개수] - JAVA
문제
세 개의 자연수 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
알고리즘 문제에 아직 낯선 탓에 일단 되는대로 코드를 작성하여 출력만 맞춰보았다.
public class ch5_3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int value = a*b*c;
String sValue = Integer.toString(value);
int arr[] = new int[sValue.length()];
int cnt[] = new int[10];
for (int i=0; i<arr.length; i++) {
arr[i] = sValue.charAt(i)-'0';
}
for (int i=0; i<10; i++){
for (int j=0; j<arr.length; j++){
if(arr[j] == i) {
cnt[i] += 1;
}
}
}
for (int i=0; i<cnt.length; i++){
System.out.println(cnt[i]);
}
}
}
결과는 정상적으로 출력되지만, 이 코드는 너무나 비효율적이며 지저분하다는 것을 생각할 수 있었다.
구글 검색을 통해 다른 사람들은 어떻게 문제를 풀이했는지 확인해보았다.
1) int value = a * b * c
a, b, c 변수를 선언하지 않고 sc.nextInt()를 작성하여 바로 값을 구할 수 있다는 것을 알 수 있었다.
2) 불필요한 배열: int cnt
for문을 통해 0부터 9까지 숫자의 개수를 구할 때마다 해당 숫자의 cnt를 출력시키면, 굳이 cnt를 배열로 저장하지 않고 간단하게 출력시킬 수 있다는 것을 알 수 있었다.
3) 불필요한 for문
기존에는 sValue를 arr배열에 삽입한 후 숫자의 개수를 구하는 방식을 이용했다.
하지만 sValue를 arr배열에 삽입하며 cnt를 구할 수 있다는 것을 알 수 있었다.
구글 검색을 통해 다른 사람들의 답안을 확인한 후 알게된 것들을 이용하여 아래와 같이 기존의 코드를 쉽고 간단하게 변경해보았다.
public class ch5_3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int value = sc.nextInt() * sc.nextInt() * sc.nextInt();
String str = Integer.toString(value);
for (int i=0; i<10; i++){
int cnt = 0;
for (int j=0; j<str.length(); j++){
if(str.charAt(j)-'0' == i) {
cnt+= 1;
}
}
System.out.println(cnt);
}
}
}
끝.
'STUDY > 백준알고리즘' 카테고리의 다른 글
[1065:JAVA] 함수 > 한수 (0) | 2022.02.09 |
---|---|
[4673:JAVA] 함수 > 셀프 넘버 (복기필요) (0) | 2022.02.09 |
[4344:JAVA] 1차원 배열 > 평균은 넘겠지 (0) | 2022.02.09 |
[1546:JAVA] 1차원 배열 > 채점 현황 (0) | 2022.02.08 |
[2577 :JAVA] 1차원 배열 > 나머지 (hashset) (0) | 2022.02.08 |