dnatuna   6년 전

테스트 케이스 전부 거의 다 테스트 해본 것 같습니다. 왜 틀렸는지 모르겠어요.

jh05013   6년 전

가능한 테스트케이스는 약 64경 개입니다. 거의 다 해봤다는 것이 이 뜻인가요, 아니면 10개 정도인가요?

https://www.acmicpc.net/board/...

"질문 검색을 먼저 해서 자신에게 필요한 답변이나 반례가 없는지 확인하고 질문을 남겨주세요."

bupjae   6년 전

https://www.acmicpc.net/board/...


여기에 나와있는 데이터로는 테스트 안 해 보신듯


dnatuna   6년 전

다 해봤습니다 저거

dnatuna   6년 전

해보고 안 돼서 남긴거에요;

jh05013   6년 전

자세히 보진 않았지만 컴파일러 차이가 날 것 같진 않은데요.

https://ideone.com/wmcbgg

5가 나와야 하는데 -1이 나옵니다.

bupjae   6년 전

https://ideone.com/e08EL5


결과가 다르게 나옵니다만...?


dnatuna   6년 전

11
40000 39999 39999 39998
1599959999
40000 39999 40000 39999
1599960000
40000 40000 40000 39999
-1
40000 39998 40000 39997
-1
40000 3 40000 3
120000
12 10 12 10
60
12 10 1 1
1
12 6 12 6
12
10 1 5 1
5
1 10 1 5
5
1 1 1 1
1

제가 돌렸을 때 이렇게 나옵니다

dnatuna   6년 전

저는 웹컴파일러 말고 VS에서 돌렸습니다.

djm03178   6년 전

우선 채점 환경은 VS보다는 ideone의 컴파일러가 더 가깝습니다.

그리고 저도 VS 2017로 돌려봤지만, 아래에서 2, 3번째가 -1이 나옵니다.

정말로 이 코드와 한 자도 다름없는 동일한 코드로 돌리신 것이 맞나요?

cheetose   6년 전

VS에서도 -1나옵니다

dnatuna   6년 전

47302f5f-543e-4b2e-a347-c29b7ba9d7e7

djm03178   6년 전

그 실행 화면이 지금 띄워놓은 저 코드로 실행되는 것이 확실한가요? 다른 프로젝트가 같이 열려있거나 하진 않고요?

dnatuna   6년 전

네 확실합니다. 일단 올려주신 Ideone 저기 사이트에서 수정을 해서 정답을 올릴 생각입니다.

djm03178   6년 전

아무리 봐도 undefined behavior가 나타날 수 없어 보이기에 드리는 말씀입니다. 그러면 무조건 실험으로 하지 말고 코드 한 줄 한 줄 분석을 해보겠습니다.

1

10 1 5 1

이 케이스에 대해서만 이야기해봅시다. 우선 m=10, n=1, x=5, y=1이고,  gcd(m, n)=1이니 MAX=10*1/1=10이 됩니다.

22번째 줄까지 조건에 맞지 않고 25번째 줄에 걸리니 year=5부터 시작합니다. year가 MAX보다 작거나 같으니 27줄 루프를 돕니다.

5%1 = 0이니 y와 같지 않습니다. year에 10이 더해져 15가 됩니다. year가 MAX보다 커져서 루프를 탈출합니다.

40번쨰 줄로 나와서, year가 MAX보다 크니 -1을 출력합니다.

정말로 이 코드가 정상 실행이 되었다면 어느 환경이든 -1이 나오는 게 당연합니다.

dnatuna   6년 전

음 그러네요...... 음;;;; 제가 좀 경솔했습니다. 죄송합니다.

위에 올린 링크는 수정된 코드입니다. 

if (m == 1) { printf("%d", y); continue; }

if (n == 1) { printf("%d", x); continue; }

이 두 개를 추가 시켜습니다.

그치만 틀렸습니다라고 나오는데 이유를 알 수 있을까요

jh05013   6년 전

2
39999 2 39998 2
2 39999 2 39998

djm03178   6년 전

m이나 n이 1일 때만이 문제가 아니라, % 연산은 절대로 나누는 수의 결과를 내지 않는다는 것을 간과한 것이 문제입니다.

1

8 2 4 2

의 정답은 4입니다. 4 % 2 = 0입니다. 그런데 코드의 로직으로 봤을 때, 이는 y와 같다고 보는 것이 맞습니다. 왜냐하면, y는 0이 될 수 없는 대신에 n이 될 수 있는 것이기 때문입니다.

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