💻 Computer/🐘 Algorithm
[Algorithm] 백준 2577번
말미잘지내
2022. 7. 20. 01:09
자바 첫 알고리즘을 풀어 보았다
백준 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을 해준다
너무 깔끔한 코드다 미쳤다
첫 알고리즘을 공부하며 내가 얼마나 알고리즘 바보인지 알 수 있었다......
나의 부족한 점들
-오래 고민해보지 않았다 (포기하지 말자)
-새로운 것을 받아들이지 않는다 (항상 열려 있어라)