ehfkswl   5년 전

반례를 모르겠어서 글 올립니다

찾아 주시면 감사하겠습니다

djm03178   5년 전

일단 로직상의 반례는 이렇습니다.

1

5 4

2 1 3 2 1

이 경우 먼저 3이 뽑히고, 바로 다음의 2가 뽑히고, 맨 앞의 2가 뽑히고, 그 다음의 1이 뽑힌 뒤에야 마지막 1이 뽑힐 수 있으므로 답이 5가 되어야 합니다. 그러나 이 코드에서는 뒤에 있는 2보다 앞에 있는 2를 먼저 뽑아가버리므로 앞의 1보다 마지막에 있는 1을 더 먼저 출력한다고 생각하고 4를 출력합니다.

또한 다른 문제가 하나 더 있는데, 다음과 같은 입력에서도 답을 출력하지 못합니다.

1

2 1

200 200

명백하게도 답은 2가 되어야 하지만 코드는 1을 출력합니다. 이유는 64번째 줄의 == 연산자는 두 Integer 객체를 비교하는데 이 때 비교하는 것이 두 객체가 담고 있는 값이 아니라, 두 객체가 서로 정확하게 같은 객체인지를 평가하기 때문입니다. Java에서는 -128~127의 Integer 객체를 미리 만들어두고 이 범위 내의 수를 Integer에 대입할 경우 미리 만들어 둔 객체를 사용하기 때문에 == 으로 비교해도 완전히 같은 객체로 판단하지만, 이 범위를 넘어설 경우 전혀 다른 새로운 객체들이 따로 만들어지므로 같은 수를 담고 있어도 서로 다른 객체로 판단합니다. 그래서 Integer를 비교할 때는 반드시 equals 메서드를 사용해야 합니다.

ehfkswl   5년 전

오 정말 감사합니다

이외에도 제 코드 자체에 여러가지 문제가 있었는데 잘해결되었습니다

항상 좋은 답변 남겨주셔서 더 빨리 배울 수 있습니다!

좋은하루되세요~

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