bluebear9699   5년 전

도대체 런타임 에러 오류 어디일까요ㅠㅜㅠㅠㅠ

한번만 도와주세요..ㅠㅠ

bupjae   5년 전

문제 설명에는 입력 데이터의 첫번째 줄에 N(nodes)와 M(count) 이 같이 주어진다고 되어있는데

이 프로그램은 두 줄에 걸쳐서 입력받고 있기 때문에 오류가 발생합니다.

bluebear9699   5년 전

런타임에러는 해결했는데 또다시 메모리 초과가 나오네요 ㅠㅠ

bupjae   5년 전

단순히 계산했을 때 이 프로그램의 공간복잡도는 O(n+m) 으로 지나치게 많은 메모리를 요구하고 있는 것은 아닌것 같지만

안타깝게도 Java 언어는 메모리 소모량 예측이 쉽지 않습니다.

BOJ에서는 각 언어별 특성을 어느정도 보정하기 위해서 Java의 메모리 허용량을 다른 언어의 약 2배 정도 할당하고 있지만

경우에 따라서는 그것도 충분하지 않을 때도 있는 것 같습니다.

이 프로그램의 메모리 소비량을 줄일 수 있는 몇가지 팁을 드리겠습니다.

1) 이 프로그램은 입력 데이터를 모두 배열에 저장해 두고 있는데, 실제로는 딱 한 번만 순서대로 처리하고 있습니다.

링크 리스트의 초기 상태를 만드는 27~29번째 줄을 nodes와 count를 읽은 직후로 옮기고, 입력 데이터를 따로 order 배열에 저장하는 대신에

31~33번째 줄 루프에서 한 줄씩 읽고 곧장 처리하고 버리는 식으로 하면 될 것 같습니다.

2) DoublyLinkedList 객체를 따로 N개 만들고 객체 참조를 이리저리 옮기는 것 보다는, 한번에 [N] 크기의 배열을 만들고 배열의 index로 링크를 표현하면 메모리를 절약할 수 있습니다.

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