devouring123   5년 전

1676번을 예전에 틀려서 다시 풀어봤는데 다른 방법으로 푸니까 맞았다고 뜨는군요.

틀린 위의 코드와 밑의 코드를 비교하는 형식으로 데이터 범위의 모든 값을 집어 넣었는데 두 코드 출력값이 모두 일치했습니다.

그러나 위의 코드는 틀렸다고 뜨고 밑의 코드는 맞았다고 뜨네요

어디서 틀렸는지 잘 모르겠습니다 ㅠㅠ

chogahui05   5년 전

채점번호 몇 번에 대해서 오류가 안 났다는 건가요?

input : 500

8605398 : 1500

8605406 : 1497

8605410 : 1500

8605416 : 1500

8605423 : 1500

8605435 : 1500

8605486 : 500

8605496 : 100

9986461 : 100

9986468 : 276

9986476 : 44

9986619 : 0

ans : 124

chogahui05   5년 전

8605496에 대해서 말씀하시는 거 같은데.. 맞나요?

i가 125의 배수일 때 몇 번째 줄이 수행될 거 같나요? 의도대로 8번째 줄이 수행될까요?

네. 알고리즘 자체는 맞습니다. 5의 배수 갯수만 봐도 되거든요.

n!인 경우, 소인수 2의 갯수 >= 소인수 5의 갯수인 게 자명하기 때문이죠. 이건 증명 쉽게 하실 거라 생각하고요.

devouring123   5년 전

9986476 번에 대해서 오류가 난것 같습니다. 알려주신부분은 밑의 코드로 작성했을 때는 문제가 되지 않을거라 생각합니다.

밑의 코드는 9986476번 코드입니다.

chogahui05   5년 전

그러면 de님이 올린, 위에 코드는 왜 맞을까요? 결과값이 왜 차이가 없을까요?

125 배수부터 if else문을 돌렸기 때문이죠. 정확히 말하면

125 배수는 25의 배수이고, 25의 배수는 5의 배수입니다.

125 배수의 집합을 A, 25의 배수 집합을 B, 5의 배수 집합을 C라고 하면

A가 B에 포함되고, B가 C에 포함되는 구조이기 때문에, 위에 올린 코드는 맞게 동작하는 거죠. 집합을 잘 그려보세요..


de님은

125 배수면 +3

125의 배수가 아니면서 25의 배수면 +2

25의 배수가 아니면서 5의 배수면 +1 

이렇게 코딩을 하려고 하셨던 게 아닌가요?

if else가 어떻게 들어가느냐에 따라서, 차이가 확 보일 거에요.

별 거 아닌 거 같다고요? 사실 별 거 아닐 겁니다. 하지만, 별 거 아닌게 굉장히 중요합니다.

기본부터 닦으라고 하는 말이 괜히 있는 게 아니죠..


사실 저도 사람인지라.. 실수를 안 할수는 없다 생각해요. 저도 흑역사가 있는데요..

그런데, 저 코드에 대해서 기본적인 반례 정도는 찾아보았어야 했다고 생각해요. 못 찾겠다. 그러면

의도치 않게 동작하는 게 있는지. 반례를 못 찾겠다면 전체적으로 코드 리뷰를 한 번 해 보세요. 그 연습도 해 놓아야 해요.

이게 쉬운 문제면 모르겠지만.

어려운 문제면, 별 거 아닌 실수가 당락을 갈라버릴 정도로 굉장히 중요해져요. 그러니까 틀렸다면

틀린 이유를 고민해 보셨으면 좋겠어요..

devouring123   5년 전

제가 다시 제시한 코드가 틀려서 질문드린건데 ㅠㅠ

chogahui05   5년 전

cnt = cnt++

이거 정의되지 않는다고 경고 떠요. 저 또한 저렇게 써 본적이 없어요.

cnt++;

이나

cnt = cnt + 1로 쓰세요.

devouring123   5년 전

아 그쪽 부분이었군요. 코딩하다가 실수로 입력했나보네요 vs에서는 돌아가길래 문제 없는줄 알았는데 아니었군요 대답 감사합니다 ㅎㅎ

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