매우 간단해 보이지만 틀리고 고민을 꽤 한 문제이다.

이 문제의 핵심은 floating point error이다.

이 문제에서 파이썬을 사용해서 계속 오답이 나온다면 그것은 파이썬의 // 연산자를 사용해야 하기 때문일 것이다.


파이썬에서 // 연산자란?

파이썬에서 나누기 연산 후, 소수점 이하의 수를 버리고 정수 부분의 수만 구한다.

 

print(int(int(N)*int(M)/2))     VS    print(int(int(N)*int(M)//2))

값이 커질수록 서로 결과값이 다르게 나온다.

예를 들어, 999999993 999999993 값을 입력시킨다면 답이 다르게 나올 것이다.

/를 사용하면 : 499999993000000000
//를 사용하면 : 499999993000000024

 

따라서, 위의 문제에 상응하는 답을 가지기 위해서는 //를 사용해야 한다.

1
2
N, M = input().split()
print(int(int(N)*int(M)//2)) 
cs

 

출처: https://www.acmicpc.net/board/view/48568

 

글 읽기 - 최대개수를 잘못 구했나요오오오...

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

 

+ Recent posts