백준 좋은 암호

KIMYEONGJUN·2024년 10월 17일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 두 정수 K, L이 주어진다.
좋은 암호인 경우에는 GOOD을 출력한다.
나쁜 암호일 경우에는 BAD를 출력하고,
K의 가장 작은 (1 아닌) 인수를 출력한다.

내가 이 문제를 보고 생각해본 부분

1837번 암호제작 문제와 같은 것같다.
다른점은 데이터 타입이 int나 long이 아닌 BigInteger이라는 것이다.
위 문제의 풀이 방식 기반으로 테이터 타입을 BigInteger로 바꾸고 그것에 맞는 연산 함수를 사용 할 것이다.
이번 문제에서 if문 대신 삼항 연산를 사용해서 문제를 풀었다.

코드로 구현

package baekjoon.baekjoon_23;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;

// 백준 2061번 문제
public class Main809 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        BigInteger K = new BigInteger(st.nextToken());
        BigInteger L = new BigInteger(st.nextToken());
        //인수분해 소수가 L보다 작을 경우 해당 소수를 저장할 변수 선언
        int N = 0;

        //L은 BigInteger형이기때문에 int형인 i와 크기 비교를 하기 위해 intValue로 int형으로 변환
        //만약 L이 int 형을 벗어난 값을 입력 받을 수 있다면 컴파일 오류가 나겠지만, 1000000이기에 가능
        for(int i = 2; i < L.intValue(); i++) {
            //K에 i를 나눠서 나머지가 0이 나오면 이라는 조건을 사용
            if((K.remainder(BigInteger.valueOf(i))).compareTo(BigInteger.ZERO) == 0) {
                N = i;
                break;
            }
        }
        //삼항연산자로 S값에 N값의 여부에 따른 값 저장
        String S = (N > 0)? ("BAD " + N) : "GOOD";
        System.out.println(S);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글