최대 1 분 소요

[백준 2577번] 숫자의 개수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package _1월_3주차;
 
import java.util.Scanner;
public class 백준_손수경_정답_2577 {
 
    public static void main(String[] args) {
        
        //sol 2. 문자형으로 전환 후 대입 & 비교
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        String mul = String.valueOf(a * b * c); //String.valueOf -> 정수를 문자열로 변환
        int[] cnt = new int[10];
                
        for (int i = 0; i < mul.length(); i++) {
            for (int j = 48; j < 58; j++) {
                if (mul.charAt(i) == j) {    // Integer.parseInt(arrayMul[i])을 통해서 정수형으로 비교해주면 계속 틀렸습니다. 라고 뜸,, 아스키 코드를 통해서 비교가 필요한듯
                    cnt[j - 48]++;
                }
            }
        }
        for (int i = 0; i < 10; i++) {
            System.out.println(cnt[i]);
        }
    }    
}
/*
sol 1. 숫자형 그대로 개수세기 -> 틀렸습니다.라고 뜸,,
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        int mul = a * b * c;
        int temp;
        int[] numCnt = new int[10];
        
        while (true) {
            temp = mul % 10;
            mul /= 10;
            for (int i = 0; i < 9; i++) {
                if (temp == i) {
                    numCnt[i]++;
                }
            }
            if (mul == 0) {
                break;
            }
        }
        
        for (int i = 0; i < 10; i++) {
            System.out.println(numCnt[i]);
        }
        
    }
*/
cs

이 문제는 다양한 방법으로 풀어봄,,,계속 틀렸다고 나왔기 때문이다…(사실 백준이 정확히 원하는 방법으로 풀었을 때만 맞았다고 나오기 때문이다,,)여튼 이 문제에서 원하는 방식은 정수형을 문자형을 바꾼 다음에 아스키 코드 를 이용하여서 비교하는 방식이다.

배운점

문자열에서는 배열처럼 인덱스를 사용할 수 없다. 따라서 문자열에서 문자 하나하나를 비교하기 위해서는 charAt(인덱스) 를 이용해 주어야 한다.

댓글남기기