[백준/브론즈5(Bronze 5)] 1271번 - 엄청난 부자 2 (C#)

2023. 6. 19. 01:38·백준/브론즈5 (Bronze V)

⚠️ 한 번씩 읽어주세요 ⚠️

제 개인의 풀이 방법이며 제 풀이가 꼭 정답은 아닙니다.
더 나은 풀이법이 존재할 경우 댓글로 공유해 주시면
저를 포함한 다른 분들에게도 많은 도움이 됩니다
전체 코드는 깃헙 링크 혹은 하단 코드를 통해 확인가능 합니다

| 문제 링크 🔗

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승은 어느 정도 값인지 궁금해지는데 온라인 거듭제곱 계산기를 돌려본 결과

무한대 값으로 처리해버리는 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);
저작자표시 비영리 변경금지 (새창열림)
'백준/브론즈5 (Bronze V)' 카테고리의 다른 글
  • [백준/브론즈5(Bronze V)] 2338번 - 긴자리 계산 (C#)
  • [백준/브론즈5(Bronze V)] 1330번 - 두 수 비교하기 (C#)
  • [백준/브론즈5(Bronze V)] 1008번 - A/B (C#)
  • [백준/브론즈5(Bronze V)] 1001번 - A-B (C#)
프로포폴
프로포폴
Unity 클라이언트 개발자가 운영 하는 개발 블로그 입니다
  • 프로포폴
    약파는개발자
    프로포폴
  • 전체
    오늘
    어제
    • 분류 전체보기 (67)
      • 유니티 (21)
        • 공부 (0)
        • 튜토리얼 (0)
        • 에셋 (3)
        • 문제 해결 (2)
        • 작업 (16)
      • 언리얼(Unreal) (1)
        • 문제 해결 (1)
      • 백준 (20)
        • 브론즈5 (Bronze V) (20)
      • 프로그래머스(Programmers) (23)
        • C# 풀이 (23)
      • C# (0)
        • 팁 (Tip) (0)
      • 컴퓨터 과학(CS) (2)
        • 알고리즘 (1)
        • 자료구조 (1)
  • 블로그 메뉴

    • 홈
    • 글쓰기
    • 태그
    • 유니티
    • 알고리즘
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    Bronze V
    CS
    프로그래머스_Lv.0
    컴퓨터과학
    프로그래머스_C#
    픽셀리마인드
    SHA
    알고리즘
    작업
    프로그래머스
    유니티
    Unity
    백준
    탐색(Search)
    projecta
    baekjoon
    개발일지
    C++
    브론즈5
    c#
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
프로포폴
[백준/브론즈5(Bronze 5)] 1271번 - 엄청난 부자 2 (C#)
상단으로

티스토리툴바