yyng729   3년 전

안녕하세요. C언어 프로그래밍 시작한지 얼마 안 된 초보입니다.

C로 2193번 문제를 풀다가 질문이 생겨 글을 쓰게 되었습니다.

8바이트 정수로 나타낼 수 있는 가장 큰 수는 263 -1 입니다.

그리고, 피보나치 수열에서 n=93일 때 처음으로 263-1을 초과하게 됩니다.

a(n=92) = 7540113804746346429 = 7.54 × 1018

263 - 1 = 9.22337204 × 1018

a(n=93) = 12200160415121876738 = 12.2 × 1018

따라서 2193번 문제에서는 1<=n<=90이므로 8bytes 자료형인 long int를 사용하면 배열을 사용하지 않고도 충분한 것으로 보입니다. (검색해본 결과 채점머신 컴파일러가 64bit로 작동하여 long int가 8bytes라고 알고 있습니다)

1. 컴파일러가 C99이후 버전이라면 64bit가 아닌 32bit 컴파일러라도 long long int가 8bytes 크기를 가지나요?

2. C99이전 32bit 컴파일러라면 배열을 사용하지 않고 문제를 해결할 수 있는 방법은 없나요?

제가 사용하는 컴파일러(Dev-C++)가 2에 해당되어 배열을 사용하여 코드를 짰는데 실행결과 입력이 90이 넘어가도 잘 작동하는 것을 확인했으나 오답처리 되었습니다.

3. 채점머신이 printf의 자료형까지도 확인하나요? 아니면 출력을 여러 번(코드 44번째줄) 해서 오답처리 된 것인가요? (코드에 주석 안 달아서 죄송합니다)

4. 3번의 오답이유가 나와있는 페이지를 찾기가 힘든데 혹시 이 설명이 있는 페이지가 있을까요?

3뿐만 아니라 여러 줄을 출력해야하는 문제에서도 마지막 줄에\n을 출력해도 정답처리되는데, 사실 예제 출력을 복사해보면 마지막 줄에\n이 없으므로 엄밀히 채점하면 오답이 된다고 생각하는데, 이것에 관해 설명된 페이지도 혹시 알려주시면 더 좋을 것 같습니다.

혹시 하나라도 아시는 분은 답변 해주시면 감사하겠습니다.

djm03178   3년 전

채점 서버의 모든 C/C++ 컴파일러의 long long int는 8바이트입니다. 따라서 배열을 사용하지 않아도 평범하게 풀 수 있습니다.

자료형은 아무 상관 없고, 오로지 출력한 글자만 일치하면 됩니다.

채점 기준에 대해서는 https://www.acmicpc.net/help/j... 를 참고하시면 됩니다. 개행이 마지막에 있는지 여부는 정답에 영향을 미치지 않습니다.

sait2000   3년 전

long int와 long long int는 다릅니다. long = long int는 32비트 이상이고 long long = long long int는 64비트 이상입니다.

dev c++에서 c99 이전 버전이라는 거는 일부러 c99 이전 버전으로 코드를 작성하시는 건가요? 그런 게 아니라면 https://kkikkodev.tistory.com/451 이런 식으로 버전을 설정할 수 있습니다.

3번 4번에 대해서는 https://www.acmicpc.net/blog/view/55 이 글을 참고해보세요. 결론부터 말하자면 틀리는 건 출력을 해야되는 걸 출력하질 않고 잘못된 걸 출력해서 그렇습니다. 어떻게 출력하는지는 채점프로그램은 알 수도 없고 신경도 안 씁니다.

seico75   3년 전

위 반례는 60을 넣었을 때이고...

아래 main을 돌려보면 뭐가 문제인지 아실 것 같습니다.

yyng729   3년 전

60을 넣어서 비교해보니 큰 숫자를 다룰 때 문자배열을 쓰는지 알겠네요 감사합니다. 다른 분들도 링크 감사합니다. 도움이 많이 되었습니다.

seico75   3년 전

아래와 같이 수정하면 가능할 것 같네요..

skysign   3년 전

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