묠니르묘묘
꾸준히 성장하는 개발자스토리
묠니르묘묘
전체 방문자
오늘
어제
  • 분류 전체보기 (188)
    • 프로그래밍 (48)
      • 디자인패턴 (4)
      • 예외,에러 (4)
      • Java (29)
      • Kotlin (3)
      • React.js (4)
      • JavaScript (2)
      • Apache Kafka (2)
    • Spring (49)
      • Spring (21)
      • Spring Cloud (3)
      • JPA (25)
    • 코딩테스트 (31)
      • 알고리즘 (5)
      • Java - 백준 (26)
      • Java - 프로그래머스 (0)
    • AWS (7)
    • 데이터베이스 (6)
    • 개발 etc (23)
    • 도서 (5)
    • 회고록 (4)
    • 데브코스-데이터엔지니어링 (15)

인기 글

최근 글

hELLO · Designed By 정상우.
묠니르묘묘

꾸준히 성장하는 개발자스토리

[백준] 2577번 - Java(자바)
코딩테스트/Java - 백준

[백준] 2577번 - Java(자바)

2022. 1. 23. 18:09

백준 2577번 자바

https://www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

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

www.acmicpc.net

 

 

 

 

알고리즘

3개의 자연수가 주어진다. ( 100 <= 자연수 < 1000)

3개의 자연수를 곱한 값에 0 ~ 9 까지 각각의 숫자가 몇 번 쓰였는지 1줄씩 출력하라.

 

1. 10개의 값을 넣을수 있는 배열을 만든다.

2. 자연수 3개를 입력받는다.

3. 자연수 3개를 곱한다.

4. 곱한 값의 길이를 반복문으로 돌린다.

   4-1. 한 글자씩 뽑아서 거기에 해당하는 숫자의 배열값을 +1씩 한다.

5. 배열을 한줄씩 출력한다.

 

 

 

풀이1

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader((new InputStreamReader(System.in)));
        BufferedWriter bw = new BufferedWriter((new OutputStreamWriter(System.out)));

        int[] arr = new int[10];
        int sum = Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine());
        String str = Integer.toString(sum);
        for (int i = 0; i < str.length(); i++) {
            for (int j = 0; j < 10; j++) {
                if ((str.charAt(i) - '0') == j) {
                    ++arr[j];
                    break;
                }
            }
        }

        for(int i=0; i<10;i++) {
            bw.write(arr[i]+"\n");
        }
        bw.flush();
    }
}

0~9의 숫자가 몇개인지 저장하기위해 10개의 값을 저장할 수 있는 배열 arr[]을 만든다.

sum에 자연수 3개를 곱한 값을 저장한다.

str에 sum을 String 타입으로 바꿔서 저장한다.

str의 길이만큼 반복문을 돌린다.

한 번 돌아갈때마다 0~9를 비교할 수 있게 반복문을 한 번 더 쓴다. (이중 for문)

맞는 값이 나오면 거기에 해당하는 배열의 값을 +1 해준다.

이 때 문자 값 - 48 또는 문자 값 - '0' 을 하면 우리가 원하는 정수값을 나타낼 수 있다.

왜 이렇게 해야하는지는 더보기를 누르면 알 수 있다.

더보기

문자(char)로 읽게되면 현재 IDE 환경에서 설정한 인코딩 숫자로 표현 되는데 대부분 아스키코드와 127번까지 값이 같아서 위 표를 보면 된다. 문자인 '0' 을 보게되면 10진수로 표현했을 때 48이 된다.

그래서 문자인 숫자를 정수로 표현하기위해서 -48 을하거나 -'0'을 넣어서 우리가 원하는 숫자를 얻게 된다.

이렇게 배열에 있는 값들을 출력하면 된다.

 

 

풀이2

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader((new InputStreamReader(System.in)));
        BufferedWriter bw = new BufferedWriter((new OutputStreamWriter(System.out)));

        int[] arr = new int[10];
        int sum = Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine());
        String str = Integer.toString(sum);
        for (int i = 0; i < str.length(); i++) {
            arr[(str.charAt(i) - '0')]++;
        }

        for (int i = 0; i < 10; i++) {
            bw.write(arr[i] + "\n");
        }
        bw.flush();
    }
}

풀이1번에서 굳이 이중 for문을 해서 0~9번에 맞는걸 +1씩 해주는것보다

str 문자열의 문자 값을 -48 또는 -'0' 을 해서 거기에 맞는 arr[] 배열을 +1 해주면 될 듯 하다.

그리고 배열을 출력한다.

 

 

풀이3

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader((new InputStreamReader(System.in)));
        BufferedWriter bw = new BufferedWriter((new OutputStreamWriter(System.out)));

        int[] arr = new int[10];
        int sum = Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine());

        while (sum != 0) {
            arr[sum % 10]++;
            sum /= 10;
        }

        for (int i = 0; i < 10; i++) {
            bw.write(arr[i] + "\n");
        }
        bw.flush();
    }
}

내가 푼 풀이말고도 다른것이 있나 싶어서 확인하던 차에 발견한 풀이법이다.

풀이2번에는 arr[(str.charAt(i) - '0')] 으로 str의 문자를 가져와서 정수로 표현했지만

여기서는 sum % 10으로 sum의 첫 번째 자리수를 표현했다.

그 후 첫 번째 자리수를 없애기 위해 sum /= 10을 하였다.

이렇게 sum이 0이 될 때까지 반복한 후 배열을 출력한다.

위의 풀이법이 이해되지 않는다면 아래를 참고하면 될 듯 하다.

 

저작자표시 (새창열림)

'코딩테스트 > Java - 백준' 카테고리의 다른 글

[백준] 1546번 - Java(자바)  (0) 2022.01.27
[백준] 3052번 - Java(자바)  (0) 2022.01.25
[백준] 2562번 - Java(자바)  (0) 2022.01.18
[백준] 10818번 - Java(자바)  (0) 2022.01.14
[백준] 1110번 - Java(자바)  (0) 2022.01.11
    '코딩테스트/Java - 백준' 카테고리의 다른 글
    • [백준] 1546번 - Java(자바)
    • [백준] 3052번 - Java(자바)
    • [백준] 2562번 - Java(자바)
    • [백준] 10818번 - Java(자바)
    묠니르묘묘
    묠니르묘묘

    티스토리툴바