본문 바로가기
Problem Solving/백준

[백준 알고리즘] 2577: 숫자의 개수 풀이(자바)

by 청량리 물냉면 2021. 7. 29.
반응형
문제

문제 출처: https://www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

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

www.acmicpc.net

 

 

코드

#1. 일일이 구하기

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num1 = sc.nextInt();
		int num2 = sc.nextInt();
		int num3 = sc.nextInt();
		int cnt0 = 0, cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0, cnt5 = 0, cnt6 = 0, cnt7 = 0, cnt8 = 0, cnt9 = 0;
		
		String result = String.valueOf(num1 * num2 * num3);	//세 수를 곱한 값을 문자열로 변환해 result변수에 저장
		
		String num [] = result.split("");	//배열에 한 글자씩 저장
		for(int i = 0; i < num.length; i++) {
			switch(num[i]) {
				case "0":
					cnt0++;
					break;
				case "1":
					cnt1++;
					break;
				case "2":
					cnt2++;
					break;
				case "3":
					cnt3++;
					break;
				case "4":
					cnt4++;
					break;
				case "5":
					cnt5++;
					break;
				case "6":
					cnt6++;
					break;
				case "7":
					cnt7++;
					break;
				case "8":
					cnt8++;
					break;
				case "9":
					cnt9++;
					break;
			}
		}
		System.out.println(cnt0);
		System.out.println(cnt1);
		System.out.println(cnt2);
		System.out.println(cnt3);
		System.out.println(cnt4);
		System.out.println(cnt5);
		System.out.println(cnt6);
		System.out.println(cnt7);
		System.out.println(cnt8);
		System.out.println(cnt9);
		
		sc.close();	
	}
}

각 줄에 해당하는 cnt 변수를 일일이 만들어서 카운트를 증가시키고 출력하는 코드. 중복되는 부분이 너무 많다.

 

 

#2. charAt() 함수 사용

*charAt(i): 인덱스 i에 해당하는 유니코드 단일문자 반환

import java.util.Scanner;

public class NumberCnt {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num1 = sc.nextInt();
		int num2 = sc.nextInt();
		int num3 = sc.nextInt();
		
		String result = String.valueOf(num1 * num2 * num3);
		int cnt[] = new int[10];	//0 ~ 9까지 각 줄의 cnt값을 저장할 배열
		
		for(int i = 0; i < result.length(); i++) {
			cnt[result.charAt(i) - '0']++; 		
			//result 변수의 인덱스 i의 유니코드 값을 int형으로 바꿔준다. 
			//해당 int 값을 인덱스로 갖는 cnt배열의 값을 +1해준다.
			//ex. result의 첫번째 값이 3이었다면: cnt[3]의 값을 +1
		}
		
		for(int i = 0; i < cnt.length; i++) {
			System.out.println(cnt[i]);
		}

		sc.close();
	}
}

해당 로직을 생각해 내기가 힘듬. 

https://rightbellboy.tistory.com/41 님의 코드를 참고했음.

 

 

 

추가

위가 버전2, 아래가 버전1 실행결과. 시간은 버전1이 더 짧게 나왔다...

 

자바 변수 선언 및 배열 생성, 초기화

 

 

 

 

반응형