자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 - 인프런 | 강의
자바(Java)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 코딩테스트에서 가장 많이 출제되는 Top 10 Topic을 다루고 있습니다. 주제와 연동하여 기초문제부터 중급문제까지 단계적으로 구성
www.inflearn.com
이 코드로 제출하니 Time Limit Exceeded 가 나왔다.
해당 오류는 시간이 초과되었다는건데, O(n)으로 풀어야 할 문제를 O(n^2)으로 풀었거나 할 때 나온다.
강사님의 코드와 비교해보니 solution 리턴값 변수형이 달랐다.
둘이 뭐가 다르길래 타임아웃이 났을까?
나는 answer 을 String 형의 변수로 선언하고 문자열 연결 연산자를 사용해
출력 할 항목이 나올 때 마다 answer에 추가해주는 방법을 썼다.
Java의 문자열은 변경될 수 없기 때문에 해당 방법을 사용하면
+연산자를 사용할 때 마다 인스턴스가 새로 생성되는데(인스턴스는 heap영역에 생성된다),
두 문자열을 연결할 경우에는 양쪽의 내용을 모두 복사해서 붙여야 하므로 시간복잡도가 O(n^2)가 된다.
ArrayList는 Collection 프레임워크에 속해 있으며 객체 배열을 사용한다. 동적 할당이라 저장공간 크기가 가변적이며, 물리 공간과 논리 공간이 동일하기 때문에 get, set 메서드를 이용한 인덱스 연산자를 사용할 수 있다.
배열의 끝에 원소를 삽입할 때 시간복잡도가 O(n)이다.
그래서 내가 처음 방법으로 시도했을 때 시간초과가 난 것이었다.
자료형과 동작마다 시간복잡도가 다르다는 걸 염두에 두고 코드를 짜야된다는 걸 깨달았다...
*참고사이트*
https://mong9data.tistory.com/132 (배열 자료형에 대한 시간복잡도와 여러 정보가 굉장히 잘 정리되어 있음)
'오늘의 취준 > 오늘의 공부' 카테고리의 다른 글
[Java] 오류/The import java.util.Collections cannot be resolvedJava (0) | 2023.07.06 |
---|---|
[SpringBoot] 스프링 컨테이너 (0) | 2023.06.29 |
[JAVA] 익명 클래스 (0) | 2023.06.02 |
[MySQL] Command Line Client 사용/ 명령어 정리 (0) | 2023.05.31 |
[JAVA/SpringBoot/Intellij] Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service (0) | 2023.05.31 |