[JAVA] List 에서 확장 for문으로 실행 시간 조금이라도 줄이기

그린·2023년 2월 28일
0

오류

목록 보기
5/17

백준 1406번 문제를 풀면서 알게 된 내용이다.

(문제 해결 관련 약간의 스포 있음)

그냥 풀었다가 시간 초과가 떴다.
어디에서 시간을 단축해야 할지 모르겠어서 여러 글을 찾아보았다가
ListIterator라는 것을 쓰면 더 시간이 단축된다는 것을 알게 되었는데,
이걸 써서 똑같이 단축시켰음에도 불구하고 또 시간 초과가 떴다.
다른 분의 코드와 통으로 비교해보다가 배열에서 값을 꺼내서 출력하는 부분만 다르다는 것을 깨달았다.
나는

LinkedList<Character> list = new LinkedList<Character>();

(중략)

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (int i = 0; i < list.size(); i++) {
	bw.write(list.get(i));
}

으로 직접 for 문을 돌면서 값을 빼왔는데,
다른 분의 정답 코드는

LinkedList<Character> list = new LinkedList<Character>();

(중략)

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (Character chr : list) {
	bw.write(chr);
}

바로 이렇게 for문을 돌면서 빼오지 않고 먼저 값을 빼둔 후 하나씩 가져오는 방식으로 출력하셨다.
리스트는 Head 포인터부터 순서대로 접근하기 때문에 접근 속도가 느리다. 그래서 리스트에서 직접 배오는 것은 시간이 오래 걸린다!

이런 것에서도 시간 차이가 발생한다는 것을 알게 되었다. (충격)
그동안에는 기존 for문을 더 많이 사용했었는데.. 앞으로는 이렇게 간단하게 값을 가져오는 확장 for문 방식을 위주로 많이 사용해야겠다.

참고 코드 출처 : https://minhamina.tistory.com/17

profile
기록하자

0개의 댓글