-
[백준/BOJ] 16428번 : A/B - 3 (JAVA / 자바)백준 2022. 1. 28. 03:23
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/16428
- 문제 -
난이도 브론즈 4 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
이게 왜 브론즈 4인지 잘 모르겠다. 다른문제하고 수준이 너무 안맞지 않나? 머 그런건 넘기고 풀이에 들어가자.
상당히 힘들게 풀었다. 전체적인 틀은 잡았지만 그 틀의 조건을 만족하기 위한 지식이 부족했다. 부족했던 지식은 그거 하나 BIgInteger 사용 시 이 수가 음수인지 양수인지 판단하는 방법이다... 이전에 공부했던 기억은 있지만 자세히 기억이 나질 않아 이것저것 찾아보았지만 이것에 대한 정보를 올려둔 사람은 많지 않았다... 시간이 되면 나도 올려놓아야겠다...
풀이로 돌아가서 문제는 단순하다. 범위가 크니 BIgInteger을 사용하고 나누어서 몫과 나머지를 출력하면 된다.
하지만 함정아닌 함정이 하나 있는데 그건 바로 나머지가 양수여야 한다는 것이다. r 조건을 보면 0<=r<=|B|다. 양수란 소리다. 그렇다면 연산을 다르게 하면 된다. BIgInteger 연산 함수에서 나머지는 remainder인데 그걸 mod로 바꾸면 양수 나머지가 나온다. 하지만 양수로 나오게 하면 몫도 바꿔줘야한다. 그건 그냥 음수 양수냐에 따라 -1 +1을 해주면 된다. 하지만 여기서 컴파일 오류가 나온다. mod를 사용햇을때 나눠줘야할 수가 음수이면 컴파일 오류가 난다. 이유는 구글링 하길 바란다... 그렇듯 mod는 포기하고 다른 방법을 찾았다. 처음대로 remainder로 나머지를 구하고 B가 음수면 -B 양수면 +B를 해준다. 나머지는 항상 양수여야하니깐... 그리고 그렇게해야 몫과 나머지가 맞아 떨어진다. 자세한건 코드로 보고.
간단하게 BigInteger 연산 함수만 적어본다.
+ > add
- > substract
x > multiple
÷ > divide
% > remainder
% > mode(음수)
-풀이-
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 A = new BigInteger(st.nextToken()); BigInteger B = new BigInteger(st.nextToken()); //A와 B가 음수 양수 일때 조건을 나누고 연산 출력 if(A.compareTo(BigInteger.ZERO) == -1 && B.compareTo(BigInteger.ZERO) == -1) { System.out.println((A.divide(B)).add(BigInteger.ONE)); System.out.println((A.remainder(B)).subtract(B)); }else if(A.compareTo(BigInteger.ZERO) == -1 && B.compareTo(BigInteger.ZERO) == 1){ System.out.println((A.divide(B)).subtract(BigInteger.ONE)); System.out.println((A.remainder(B)).add(B)); }else { System.out.println(A.divide(B)); System.out.println(A.remainder(B)); } } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1085번 : 직사각형에서 탈출 (JAVA / 자바) (0) 2022.01.28 [백준/BOJ] 1009번 : 분산처리 (JAVA / 자바) (0) 2022.01.28 [백준/BOJ] 23825번 : SASA 모형을 만들어보자 (JAVA / 자바) (0) 2022.01.28 [백준/BOJ] 20499번 : Darius님 한타 안 함? (JAVA / 자바) (0) 2022.01.28 [백준/BOJ] 19944번 : 뉴비의 기준은 멀까? (JAVA / 자바) (0) 2022.01.28