나의 자랑스러운 칭구를 통해 solved.ac(https://solved.ac/problems/level)를 알게 되었고 나도 해봐야겠다는 생각이 들어 오늘부터 문제풀이를 시작했다.
이 사이트가 사실 백준 알고리즘 사이트와 연동? 되어있는 사이트라 이전에 풀었던 문제들도 해결이 된 상태로 있어서
오늘 리뷰할 문제로 바로 넘어갔다.
오늘의 문제~는
엄청난 부자2 (https://www.acmicpc.net/problem/1271)
갑부 최백준 조교는 동전을 최소로 바꾸는데 성공했으나 김재홍 조교가 그 돈을 발견해서 최백준 조교에게 그 돈을 나누자고 따진다.
그 사실이 전 우주로 알려지자 우주에 있던 많은 생명체들이 자신들에게 돈을 분배해 달라고 당장 달려오기 시작했다.
프로토스 중앙 우주 정부의 정책인, ‘모든 지적 생명체는 동등하다’라는 규칙에 입각해서 돈을 똑같이 분배하고자 한다.
한 생명체에게 얼마씩 돈을 줄 수 있는가?
또, 생명체들에게 동일하게 분배한 후 남는 돈은 얼마인가?
사실 문제의 내용만 대강 읽어보면 별거 없어보인다
이거 뭐 나누기, 나머지 구하고 출력하면 되지 않을까 싶었다.
그런데...
아니 런타임 오류라니... 이클립스에서 예시 입력처럼 해도 잘 나왔는데...
하지만 나처럼 이 문제에서 어려움을 겪는 이들이 좀 있었던지 InputMismatch만 검색했더니 문제&해결점을 찾을 수 있었다.
10^1000까지 입력이 되야하는 조건이 있기 때문에 long 타입으로도 입력 받을 수 가 없었던 것
그렇다면 어떻게 해야하는 것인가!
BigInteger를 소환해야 한다
일단 내가 한 풀이를 보자
일반적인 변수 선언 및 값 할당과는 달리 변수 선언 및 연산 수행시 객체 생성,메소드와 같은 과정을 거쳐야 한다
ex)
int a = 10;
-> BigInteger a = new BigInteger("100000000000000"); //입력시 문자열처럼 " "을 씌어서 해줘야함
연산 또한 일반적인 연산(+,-,*,/,%)이 아니라 BigInteger 안의 메소드를 써줘야한다!
메소드 | 기능 | 예시 |
add() | 더하기 | bi1.add(bi2) |
substract() | 빼기 | bi1.substract(bi2) |
multiply() | 곱하기 | bi1.multiply(bi2) |
divide() | 나누기(몫) | bi1.divide(bi2) |
remainder() | 나머지 | bi1.remainder(bi2) |
gcd() | 최대공약수 | bi1.gcd(bi2) |
이 외에도 다양한 메소드들이 있다..
표의 예시를 보면 알겠지만 연산하려는 개체.메소드(피연산 개체)로 구성됨을 알 수 있다.
-> bi1.add(bi2)의 경우는 bi1+bi2 가 되는 것
BigInteger를 자세히 보지 않아 상세한 설명이 불가하지만 해당 문제를 해결하기 위해 사용법을 조금 기술해보았다.
공부한 것을 잊지 않기 위해 서술해 놓은 것이라 부족한 점이 많지만 도움이 되었으면 한다
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] 백준 문제풀이(9733번 : 꿀벌) (0) | 2022.12.06 |
---|---|
[JAVA] 백준 문제풀이(9625번 : BABBA) (0) | 2022.11.29 |
[JAVA] 백준 문제풀이(1252번 : 팰린드롬수) (0) | 2022.06.05 |
[JAVA] 백준 문제풀이 (10820번: 문자열 분석) (0) | 2022.06.04 |
[JAVA] 백준 문제풀이 (15351번: 인생 점수) (0) | 2022.06.04 |