우선, int와 Integer는 다르다는 것을 아셔야 합니다. 자바에서 Integer를 어떻게 다루는지 정확히는 모르겠으나, 아마도 127까지의 객체는 미리 만들어 두고 나머지에 대해서만 필요할 때 생성하는 것으로 보입니다.
Integer는 클래스이므로, 두 Integer 객체를 == 연산하는 것은 두 객체가 같은 객체인지를 비교합니다. 즉, 똑같이 1000 이라는 값을 담고 있는 Integer 객체라고 해도 둘은 서로 별개의 객체일 수 있습니다. 질문 게시판에 있는 예시들은 대체로 매우 작은 케이스들이므로, 아마도 Java가 내부적으로 미리 만들어 둔 객체들이 대신 사용되어 같은 값을 가진 객체에 대해 ==가 항상 true를 반환하나, 더 큰 케이스로 테스트하면 false가 나타나게 됩니다.
그래서 두 Integer 객체가 가지고 있는 값이 같은지를 비교할 때는 반드시 .intValue() 메서드를 통해서 완전한 int 값을 받아와야 하는 것이지, 단순히 == 만으로 비교해서는 안 됩니다.
이를 해결하고 나면 또 다른 문제가 있습니다. 바로 figure.get(i)와 list.get(target_l) 입니다. figure와 list는 모두 LinkedList 객체입니다. 그런데, 링크드 리스트가 어떻게 동작하는지 아시나요? i번째 노드를 찾으려면 어떻게 해야 할까요? 리스트의 처음부터 하나씩 탐색하면서 i개를 탐색할 때까지 전진해 나가야 할 것입니다. 그렇다면, 1부터 n까지의 원소를 n번 찾으려면 시간이 무려 O(N^2)이 걸립니다. 즉, 시간 초과가 됩니다.
그래서 여기서는 LinkedList가 아닌 ArrayList를 써야, i번째 원소에 접근하는 것을 O(1)에 할 수 있습니다. LinkedList는 처음이나 끝 원소에만 관심이 있을 때 써야 하는 자료구조이지, 임의의 인덱스에 바로 접근하기 위한 목적으로는 매우 부적절합니다.
이들을 고쳐서 내니 맞았습니다.
dl0312 6년 전
질문게시판에 올라온 테스트케이스는 다 통과하고
4로 나올 수 있는 배열들 넣었을 때도 맞게 나왔는데 어디서 잘못된건지 모르겠습니다...
Stack을 push로 채워나가다 list의 타겟이 되는 곳과 같으면 pop하는 로직으로 짰습니다.
NO가 뜨는 경우는 Queue q에서 다 가져왔는데도 s.peek()과 list의 타겟이 되는 곳이 같지 않는 경우입니다.
다른분들처럼 런타임에러나 출력초과라면 구조를 바꿔볼텐데 그것도 아니고 틀렸습니다가 뜨네요 ㅠㅠ
틀리는 테스트 케이스라도 제시해주시면 감사하겠습니다!