백준

[백준/BOJ] 1837번 : 암호제작 (JAVA / 자바)

코메인 2022. 1. 29. 17:32

안녕하세요~ 코딩하는 코알못 코메인입니다.

 

 

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

 

1837번: 암호제작

원룡이는 한 컴퓨터 보안 회사에서 일을 하고 있다. 그러던 도중, 원룡이는 YESWOA.COM 으로부터 홈페이지 유저들의 비밀키를 만들라는 지시를 받았다. 원룡이는 비밀 키를 다음과 같은 방법으로

www.acmicpc.net


- 문제 -

 

난이도 브론즈 3 문제이다.

자바에서 입력방식은 scanner와 bufferedreader가 있다.

자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.

bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.

더 자세한 내용은 아래 글 참고 하면 좋다.

https://comain.tistory.com/3

 

(JAVA / 자바) Scanner 와 Bufferedreader

안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자

comain.tistory.com

 

풀이 방법

어렵지 않게 풀었지만... 멍청하게 GOOD을 Good으로 출력되게 해서 한참을 헤맸다...
P의 값이 long 범위를 넘기때문에 BigInteger 사용. 사실상 우리가 소수를 구하는 문제가 아니다.(왜냐하면 결국 소수 곱의 값은 백준 자체에서 돌릴떄 알아서 넣을테니깐)

반복문을 만들고, 그 반복문에서 1부터 1씩 계속 증가하는 변수 i를 만든다. 그 변수를 계속 암호 P값에 나눠준다. 그리고 i가 계속 증가하다 K 이상이 되면 GOOD을 출력하고 반복문을 종료한다.

그리고 i가 K값 이상이 되기 전에 P값을 나눠서 0이 나오는 수가 나오면 K값 미만의 소수가 나오는 것이기 때문에 BAD와 작은 i값을 출력한다.

 

 


-풀이-

 

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

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		BigInteger P = new BigInteger(st.nextToken());
		BigInteger K = new BigInteger(st.nextToken());
		//계속 1씩 증가해줄 변수 선언
		BigInteger i = new BigInteger("1");
		
		//몇번 반복할지 정할 수 없기에 무한루프
		while(true) {
			//i가 K보다 크거나 같아지면 GOOD 출력 그리고 반복문 종료
			if(i.compareTo(K) == 1 || i.compareTo(K) == 0) {
				System.out.println("GOOD");
				break;
			}
			//한번 반복 될때마다 i에 1더한다.
			i = i.add(BigInteger.ONE);
			
			//P가 i로 나눠지고, i가 K보다 작으면 BAD와 i값을 출력. 반복문 종료
			if(P.remainder(i).compareTo(BigInteger.ZERO) == 0 && i.compareTo(K) == -1) {
				System.out.println("BAD " + i);
				break;
			}
		}
		
	}

}

-결과-

 


아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠다.