dksdmssh1212   4년 전

질문 게시판의 반례를 다 넣어봤는데 어디서 문제가 생긴지 모르겠습니다.

부탁드립니다.

dksdmssh1212   4년 전

이 소스코드의 예제를 만들어 출력을 해봤습니다.

6
-3
input key is : -3 and then before increasing value is : 0.
After increasing value : 1
-2
input key is : -2 and then before increasing value is : 0.
After increasing value : 1
-1
input key is : -1 and then before increasing value is : 0.
After increasing value : 1
0
input key is : 0 and then before increasing value is : 0.
After increasing value : 1
0
input key is : 0 and then before increasing value is : 1.
After increasing value : 2
1
input key is : 1 and then before increasing value is : 0.
After increasing value : 1
0

nahwasa   4년 전

cards[input] = cards[input]++;

때문입니다.

cards[input]에 cards[input]을 넣고

cards[input]을 1증가.

뭔가 이상하죠?!

그냥 cards[input]++; 로 하니 통과되네요.

dksdmssh1212   4년 전

감사합니다. 사소한 오류였네요.

그것 때문에 직접 이런 코드를 넣어 확인해 본건데, 왜 오류가 뜬지 모르겠습니다 ... ㅎㅎ;;

nahwasa   4년 전

++ 쪽을 이상하게 사용하면 논리적으로 맞을꺼같아도 내부 구현적으로 동작이 진짜 이상하게 되더라구요 ㅋㅋ

저도 늅늅이라 자세히 설명은 못드리지만, 오류 나는 반례는 들어드릴 수 있습니다.

이하 수정전 0, 수정후 1. 답은 1이구용.

10
1
1
1
1
1
2
2
2
2
2

dksdmssh1212   4년 전

정성스럽게 시간 내주셔서 답변 주신 것에 대해 정말 감사드립니다.

위에 올려주신 반례를 오류나는 코드로 돌려보니 답이 1로 제대로 나옵니다.

혹시나 하여 여러번 돌려봐도 똑같은 답이 나오구요.

혹시 초기화 문제인가 싶어 기존에 key가 존재하지 않는 경우 initialize 여부를 찾아봤는데

상관 없다고 나옵니다.(이건 제가 출력으로 확인한 거기도 하구요)

https://stackoverflow.com/questions/5616421/increment-mapstring-int-using-operator

어쨋든 후위연산자에 대해 조금 조심할 필요성이 있겠네요...

조그만 추측이지만 .. 후위연산자를 할 때 더미를 만드는 특성에서? 오류가 생기지 않았나 추측해봅니다..

nahwasa   4년 전

아.. ideone 기준으론 0이 나왔습니다.

제가 다른 ide가 없어 ideone우로 해봤네용.

보통 ideone과 다를경우 초기화문제일 경우가 있던데 일단 제가 c++은 자신있는편이 아니라 확답을 못드리겠네요 ㅜ 죄송합니다.

일단 일반 ide에서 맞아도 ideone에서 틀리면 백준도 보통 틀렸다고 뜨긴하더라구용

dksdmssh1212   4년 전

친절한 답변 다시 한번 감사드립니다.

행복한 백준 되세요 :)

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