qktlf789456   3년 전

어렵지 않은 문제를 풀고있었는데

1시간동안 자꾸 이유모를 틀렸습니다가 나와서 계속 코드 오류를 찾고있었습니다.

그런데 문제는 '후위연산' 에 있었습니다. ( a++, a--) 


아래는 문제의 코드입니다.

데이터를 입력받아 정렬하는 과정에서 입력받는 데이터가 3개 이하라 삽입정렬을 간단히 구현하여 저장하였습니다.

그런데 저 주석처리한 부분에 

num[j + 1] = num[j--]; 

부분이 문제가 있었네요. 제가 보기엔 문제가 없어보입니다..

저부분에서 후위연산을 지우고, 그 다음줄에 j--; 를 하니 정상적으로 통과되네요.

전위연산, 후위연산시


a = --a + ++a + a--;


이런식의 연산은 컴파일러에 따라 작동방식이 다르지만, 제가 주석으로 표시한부분은 연산 후 j 를 마이너스하게 되므로 문제가없어보입니다 ㅠ 


어디에서 오류가 생겼을까요? 

malratz   3년 전

문제 번호를 적어주세요.

sait2000   3년 전

별로 그렇게 간단하지가 않습니다. 정확한 규칙은 아래 링크에 있습니다. 저도 내용은 잘 모릅니다. 어렵습니다.

https://en.cppreference.com/w/cpp/language/eval_order

가장 좋은 방법은 저 규칙을 따질 일이 안 생기게 ++이나 --가 들어가서 헷갈리는 코드를 안 짜는 것 같습니다.

qktlf789456   3년 전

@malratz

님 18511번입니다.

@sait2000

님 감사합니다.

즐겨서 사용하던 문법이였는데 자제해야겠습니다...

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