AngelPlayer`s Diary

링크

https://www.acmicpc.net/problem/1271

 

1271번: 엄청난 부자2

첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. (1 ≤ m ≤ n ≤ 101000, m과 n은 10진수 정수)

www.acmicpc.net

 

 

 

문제 해석

돈(n)을 나눠가질 인원(m)에게 균등하게 나눠준다면, 각 인원이 받을 돈과 남는 돈을 출력하는 문제

(굉장히 쉬운 문제라 그냥 넘어가려 했으나 프로토스의 공정함에 대해 이야기하기에 굉장히 참을 수 없었다..!)

(그리고 틀려버렸다..!)

 

 

코드

1번 코드 (x)

n, m = map(int, input().split())

print(int(n / m))
print(n % m)

 

2번 코드 (o)

n, m = map(int, input().split())

print(n // m)
print(n % m)

 

 

 

코드 해석

각 개인이 받을 돈은 나눗셈의 몫을 통해, 남은 돈은 나머지를 통해 쉽게 해결이 가능한 문제이다.

 

 

 

발생한 문제 & 해결 방안

자고 일어나서 코드를 짜고 테스트를 하다가 문득 파이썬의 나눗셈은 소수점까지 계산한다는 사실이 생각이나 int()를 감싸주면 '나머지를 알아서 버리겠지'라는 생각에 1번과 같은 코드를 작성하였다.

하지만 백준에서 '런타임 에러 (OverflowError)'가 발생하였다. 

 

백준이 런타임 에러의 종류를 알려주지 않기 때문에 정확한 원인은 알 수 없으나, 아마 나눗셈 도중에 범위를 넘어가는 overflow 등이 나타나지 않을까라고 예상하였다.

 

타 블로그 등을 확인해 보았을 때 java에서 integer가 아닌 biginteger를 사용했을 때 해결했다는 것을 보아 어느 정도 맞는 것 같다.

 

->

파이썬은 별도의 자료형 변환 없이 간단하게 //를 사용하면 해결이 가능하였다.

 

 

 

 

 

 

해당 코드는 에디터가 코드 연습을 위해 직접 작성하였습니다.

혹시 오류가 있거나 더 좋은 코드 방향성을 아시는 분은 댓글로 남겨주시면 감사하겠습니다..!

 

 

 

- 참고 문헌- 

https://yongku.tistory.com/entry/%EB%B0%B1%EC%A4%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%EC%A4%80-1271%EB%B2%88-%EC%97%84%EC%B2%AD%EB%82%9C-%EB%B6%80%EC%9E%902-%EC%9E%90%EB%B0%94Java

공유하기

facebook twitter kakaoTalk kakaostory naver band