새소식

💻 Computer/🐘 Algorithm

[Algorithm] 백준 2577번

  • -

자바 첫 알고리즘을 풀어 보았다

백준 2577번

 

package baekjoon.problem;

// 세 개의 자연수 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번 

public class Problem_2577 {

	public static void main(String[] args) {
		int[] Int_Count_Array = new int[10];
		
		int 
		A = 150,
		B = 266,
		C = 427,
		multiply = A*B*C;

		Int_Count_Array = Countint(multiply);
		for(int s : Int_Count_Array) System.out.println(s);
	}

	//숫자를 문자열로 만들어줌
	public static String MakeIntToString(int multiply){
		String String_Multiply = Integer.toString(multiply);
		return String_Multiply;
	}

	//문자열이 아닌 문자를 숫자로 바꿔줌
	public static int MakeCharToInt(char Char_Multiply){
		int Int_Multiply = (int)Char_Multiply;
		return Int_Multiply;
	}

	//숫자를 배열에 나눠서 저장 해줌
	public static int[] Countint(int multiply){
		String String_Multiply = MakeIntToString(multiply);
		int[] Int_Count_Array = new int[10];
		int Int_Multiply;		

		for(int i=0; i < String_Multiply.length(); i++){
			Int_Multiply = MakeCharToInt(String_Multiply.charAt(i));
			switch(Int_Multiply-48){
				case 0 -> Int_Count_Array[0] += 1;
				case 1 -> Int_Count_Array[1] += 1;
				case 2 -> Int_Count_Array[2] += 1;
				case 3 -> Int_Count_Array[3] += 1;
				case 4 -> Int_Count_Array[4] += 1;
				case 5 -> Int_Count_Array[5] += 1;
				case 6 -> Int_Count_Array[6] += 1;
				case 7 -> Int_Count_Array[7] += 1;
				case 8 -> Int_Count_Array[8] += 1;
				case 9 -> Int_Count_Array[9] += 1;
			}
		}
	return Int_Count_Array;
	}
}

처음에 는 이렇게 풀어보았다 

코드를 모두 작성하고 나서 이거는 너무 효율이 없어 보이네....

라는 생각을 하며 이 문제를 푼 다른 사람들의 답을 보았다.

 

 그중 가장 괜찮은 알고리즘을 사용해 보기로 했다

 

package baekjoon.problem;

import java.util.Scanner;


// 세 개의 자연수 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번 

public class Problem_2577 {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int Result = s.nextInt() * s.nextInt() * s.nextInt();

		s.close();

		int[] Count_Int = new int[10];


		//어떻게 이런 것을 생각했는지 매우 경이롭다
		while(Result != 0){
			Count_Int[Result % 10] +=1;
			Result /= 10;
		}

		//여기는 내각 생각해본 부분 굳이 연산을 추가 시킬 필요 없다 효율성 없는 코드이다....
		// for(int i = 0; i <= Integer.toString(Result).length(); i++){
		// 	Count_Int[Result%10] += 1;
		// 	Result /= 10;
		// }

		for(int count : Count_Int) System.out.println(count);
	}
}

 

출처: https://st-lab.tistory.com/45

 

[백준] 2577번 : 숫자의 개수 - JAVA [자바]

https://www.acmicpc.net/problem/2577 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다. www.acmicpc.net 문제 문제..

st-lab.tistory.com

위 코드를 내가 해석한 대로 설명을 해보자면

모든 값을 더한 걸 Result에 넣어준다

크기가 10인 정수형 배열 Count_Int를 만들어 준다

 

while(Result!= 0)   =>  Result가 0이 아니라면 실행

Count_Int [Result % 10] +=1;   => Result를 10으로 나눈 나머지 값을 Count_Int의 인덱스로 갖고 그곳에 +1을 해준다
Result /= 10;  =>  마지막으로 Result의 값을 나누기 10을 해준다

 

 

너무 깔끔한 코드다 미쳤다

 

 

 

첫 알고리즘을 공부하며 내가 얼마나 알고리즘 바보인지 알 수 있었다......

 

 

 

나의 부족한 점들
-오래 고민해보지 않았다 (포기하지 말자)
-새로운 것을 받아들이지 않는다 (항상 열려 있어라)

 

'💻 Computer > 🐘 Algorithm' 카테고리의 다른 글

[Algorithm] 백준 1712 - 손익분기점  (0) 2022.08.04
[Algorithm] 백준 1316  (0) 2022.08.03
[Algorithm] 백준 2941  (0) 2022.08.03
[Algorithm] Select sort Algorithm  (0) 2022.08.02
[Algorithm] 백준 2577  (0) 2022.07.25
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.