공부하기/백준

[Java] 백준 풀기 1356 - 유진수

XEV 2023. 12. 5. 23:38

자바 백준 1356번

브론즈 1

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

 

1356번: 유진수

첫째 줄에 수 N이 주어진다. 이 수는 2,147,483,647보다 작거나 같은 자연수이다.

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 수학, 구현, 문자열, 브루트포스, 사칙연산

 

 

 

 

 

코드 보기

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 입력 받은 숫자를 변수에 저장
        String input = sc.next();
        
        // 입력된 숫자가 유진수인지 판별하여 결과 출력
        if (isEugeneNumber(input)) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
    }
    
    // 유진수인지를 판별하는 함수
    public static boolean isEugeneNumber(String num) {
        int len = num.length();
        
        // 숫자를 나눠가며 유진수인지 확인
        for (int i = 1; i < len; i++) {
            // 숫자를 두 부분으로 나눔
            String firstPart = num.substring(0, i);
            String secondPart = num.substring(i);
            
            // 두 부분의 자릿수 곱이 같으면 유진수이므로 true 반환
            if (calculateProduct(firstPart) == calculateProduct(secondPart)) {
                return true;
            }
        }
        // 모든 경우를 확인했지만 유진수가 아닌 경우 false 반환
        return false;
    }
    
    // 숫자의 각 자릿수를 곱하여 결과 반환하는 함수
    public static long calculateProduct(String num) {
        long product = 1;
        
        // 각 자릿수를 곱함
        for (int i = 0; i < num.length(); i++) {
            int digit = Character.getNumericValue(num.charAt(i));
            product *= digit;
        }
        // 곱한 결과 반환
        return product;
    }
    
}