본문 바로가기
solved/브론즈

solved 브론즈 백준 1271번: 엄청난 부자2

by 비원(Be one) 2021. 9. 7.
반응형

뭔가 길게 적혀있지만, 결국 두 정수를 입력받으면 몫과 나머지를 출력하는 코드를 작성하는 문제입니다.

 

이거도 연산자를 이용하면 간단하게 풀 수 있습니다.

 

#include <stdio.h>

int main(void) {
	int money, person;
	
	scanf("%d", &money);
	scanf("%d", &person);	
	
	printf("%d\n", money/person);
	printf("%d\n", money%person);
 	
	return 0;
}

이렇게 또 하나를 해결했다... 싶었을 때

?????????? 왜 틀렸다고 나오는거지???

잠깐 머리가 멍해져서 혹시 오타가 있나 코드를 다시 봤지만 오타는 없었고 코드도 잘 작동되었습니다.

그런데 왜 틀렸다는 걸까??

 

이유는 바로 입력에 있었습니다.

입력값의 범위가 10의 1000제곱까지 될 수 있다는 것입니다.

 

C언어에서 정수형의 표현 범위는 long을 이용해도 2,147,483,647 정도로 10의 1000제곱에 비하면 터무니없이 작은 수 입니다.

 

그래서 계산할 수 있는 범위를 벗어나서 오버플로우가 발생하고, 그래서 출력값이 잘못 나오는 겁니다.

 

브론즈 문제인데 이렇게 어렵나?? 싶어 잠깐 검색을 해보니 글 한 줄이 눈에 띄였습니다.

파이썬은 큰 수를 자동으로 처리할 수 있다.

이 글을 보자마자 "이 문제는 C언어가 아니라 파이썬으로 풀어야 하는구나..." 싶었습니다.

어쩐지 브론즈 문제가 이렇게 복잡할리가....

 

money, people = map(int, input().split())

print(money//people)
print(money%people)

파이썬으로 하니 C언어보다 코드가 간결해졌습니다.

 

반응형