LLONG_MAX가 뭔진 모르지만 이걸 초과할 수 있을까요? 저걸 MOD로 고치니 맞다고 뜹니다.
17520번 - Balanced String
감사합니다, clrmt님 덕분에 LLONG_MAX의 값을 다른 값으로 바꾸어 보면서해결할 수 있었어요.
LLONG_MAX는 2^63 - 1 인데, 그 절반 정도 되는 2^62 - 1 로 바꾸니 맞다고 뜨고, 2^62 로 바꾸니 틀렸다고 떴습니다.
문제는 20번째 라인인 sum = num_prev [ 1 ] + num_prev [ 2 ] ; 에서
( unsigned long long ) = ( long long ) + ( long long ) 였습니다.
그래서 두 ( long long ) 의 합이 LLONG_MAX 보다 큰 값이 될 때 overflow가 발생했어요.
이를 ( unsigned long long ) = ( unsigned long long ) + ( long long ) 으로 형변환 해 주고 더하니까,
이제는 LLONG_MAX의 값을 다른 값으로 안 바꾸고도, 원래의 LLONG_MAX인 2^63 - 1 에서도 맞았습니다.
제 컴파일러에서는 웬일인지 overflow가 발생하지 않아서 출력이 같았네요..
감사합니다!
댓글을 작성하려면 로그인해야 합니다.
yhkee0404 4년 전
제가 두 코드를 제출하였는데, 하나는 맞았고 하나는 틀렸습니다.
그런데 이 두 코드는 가능한 모든 입력 범위에서 같은 출력을 냅니다.
가능한 모든 입력 범위는 양의 정수 n (1 ≤ n ≤ 100,000)입니다.
왜 틀렸을까요?
실제로 제가 제출한 두 코드와 채점 결과를 다음에서도 확인하실 수 있습니다.
https://www.acmicpc.net/status...