본문 바로가기

알고리즘/알고리즘

[백준] 숫자의 개수

세 개의 자연수 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의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

 

package com.company;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class test18 {

    public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int result = 1;
        for(int i=0; i<3; i++){
           result *= Integer.parseInt(br.readLine());
       }
        //System.out.println(result);// 세개 곱한 값


        // int to String
        String intToString = String.valueOf(result);
        Map<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
        for(int i=0; i<10; i++){
            hashMap.put(i,0);//초기화
        }

        for(int i=0; i<intToString.length(); i++){
            int temp = intToString.charAt(i)- '0';
            hashMap.put(temp, hashMap.get(temp)+1);// 아스키코드로 검색 후 값+1 대체
        }

        for(Integer i : hashMap.values())
            System.out.println(i);
    }//main
}

 

포인트

treeMap에 put은 값을 대체한다.

charAt은 String에만 적용이 된다.

String.valueOf(result); // 문자로 형변환

treeMap.values()

 

처음에는 treeMap으로 작성했는데. treeMap은 속도가 느려서 HashMap으로 변경하였다.

 

 

아래 코드는 배열로도 할 수 있다는걸 보고 인상 깊어서 가져왔다.

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        try {
            process();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void process() throws Exception {
        BufferedReader br = new BufferedReader(
                new InputStreamReader(System.in));
 
        long[] input = new long[3];
        input[0] = Long.parseLong(br.readLine());
        input[1] = Long.parseLong(br.readLine());
        input[2] = Long.parseLong(br.readLine());

        String result = String.valueOf(input[0] * input[1] * input[2]);
        int[] count = new int[10];

        for (int i = 0; i < result.length(); i++) {
            count[(result.charAt(i) - '0')]++;
        }

        for (int i = 0; i < count.length; i++) {
            System.out.println(count[i]);
        }
    }
}

'알고리즘 > 알고리즘' 카테고리의 다른 글

[프로그래머스][해시] 완주하지 못한 선수  (0) 2021.09.27
[백준] No Duplicates  (0) 2021.09.27
[백준] 평균은 넘겠지  (0) 2021.09.27
[백준] 최댓값  (0) 2021.09.25
[백준] 곱하기  (0) 2021.09.25