⚠️ 한 번씩 읽어주세요 ⚠️
제 개인의 풀이 방법이며 제 풀이가 꼭 정답은 아닙니다.
더 나은 풀이법이 존재할 경우 댓글로 공유해 주시면
저를 포함한 다른 분들에게도 많은 도움이 됩니다
전체 코드는 깃헙 링크 혹은 하단 코드를 통해 확인가능 합니다
| 문제 링크 🔗
1271번: 엄청난 부자2
첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. (1 ≤ m ≤ n ≤ 101000, m과 n은 10진수 정수)
www.acmicpc.net
| 문제 설명 ❓
갑부 최백준 조교는 동전을 최소로 바꾸는 데 성공했으나 김재홍 조교가 그 돈을 발견해서 최백준 조교에게 그 돈을 나누자고 따진다.
그 사실이 전 우주로 알려지자 우주에 있던 많은 생명체들이 자신들에게 돈을 분배해 달라고 당장 달려오기 시작했다.
프로토스 중앙 우주 정부의 정책인, ‘모든 지적 생명체는 동등하다’라는 규칙에 입각해서 돈을 똑같이 분배하고자 한다.
한 생명체에게 얼마씩 돈을 줄 수 있는가?
또, 생명체들에게 동일하게 분배한 후 남는 돈은 얼마인가?
| 입출력 예시 💬
입력:
첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. (1 ≤ m ≤ n ≤ 10^1000, m과 n은 10진수 정수)
출력:
첫째 줄에 생명체 하나에게 돌아가는 돈의 양을 출력한다. 그리고 두 번째 줄에는 1원씩 분배할 수 없는 남는 돈을 출력한다.
1)
예제 입력 :
1000 100
예제 출력 :
10
0
| 풀이 🔥
돈(n)을 입력받고 생명체 수(m) 만큼 동등하게 나누고(= 몫), 남는 돈(= 나머지)을 출력하라는 문제입니다.
문제 자체만 보면 단순히 나눈 다음 해당하는 몫과 나머지를 출력하면 되지만, 단순하게 풀게 되면 아마 풀리지 않을 것입니다.
입력 조건을 자세히 보면 n, m 모두 최댓값이 10^1000입니다.
간혹 가다가 제곱을 그냥 곱셈으로 생각해 버려서 10 * 1000? 10,000 밖에 안되네 하시는 분들도 보았습니다
하지만 제곱이라 상상을 초월해 버리는 값을 내놓게 됩니다.
예로 10^12만 해도 많이 사용하는 int의 최대 값인 약 21억을 훌쩍 뛰어넘는 1조가 되게 됩니다.
그럼 10 ^ 1000승은 어느 정도 값인지 궁금해지는데 온라인 거듭제곱 계산기를 돌려본 결과

이런 말도 안되는 결과가 나옵니다.
그렇기 때문에 간단히 나눈 몫과 나머지를 일반적인 자료형을 사용한다면 의도하는 값을 계산할 수 없이 오버플로우를 발생시키게 됩니다.
이에 대한 해결 방법으로 다행히 C#에서는 BigInteger라는 구조체 제공 합니다.
해당 구조체는 값이 매우 큰 경우 사용하면 유용한 구조체이고 해당 구조체를 이용해서 문제를 풀이하였습니다.
| 전체 코드 🔎
[깃헙 / Github] (IDE: Rider)
GitHub - taehuuun/CodingTest: This is a auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github
This is a auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - GitHub - taehuuun/CodingTest: This is a auto push repository for B...
github.com
// BigInteger를 사용하기 위한 네임스페이스
using System.Numerics;
// 문자열의 형태로 값을 입력 받음
string input = Console.ReadLine();
// 입력받은 문자열을 공백을 기준으로 나눔
string[] splitInput = input.Split(' ');
// 나눈 0번째 문자열을 BigInteger 형태로 파싱한 뒤 사용
BigInteger money = BigInteger.Parse(splitInput[0]);
// 나눈 1번째 문자열을 BigInteger 형태로 파싱한 뒤 사용
BigInteger organismCnt = BigInteger.Parse(splitInput[1]);
// 몫을 출력 함
Console.WriteLine(money/organismCnt);
// 나머지를 출력 함
Console.WriteLine(money%organismCnt);