-
[백준/BOJ] 1837번 : 암호제작 (JAVA / 자바)백준 2022. 1. 29. 17:32
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/1837
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
어렵지 않게 풀었지만... 멍청하게 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; } } } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1964번 : 오각형, 오각형, 오각형… (JAVA / 자바) (0) 2022.01.29 [백준/BOJ] 1864번 : 문어 숫자 (JAVA / 자바) (0) 2022.01.29 [백준/BOJ] 1703번 : 생장점 (JAVA / 자바) (0) 2022.01.29 [백준/BOJ] 1598번 : 꼬리를 무는 숫자 나열 (JAVA / 자바) (0) 2022.01.29 [백준/BOJ] 1547번 : 공 (JAVA / 자바) (0) 2022.01.29