본문 바로가기

Algorithm/JAVA

(3)
[Algorithm/Java] 배열과 리스트 배열 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조 인덱스를 통해 배열의 값 참조 가능 배열의 특징 인덱스를 사용해 값에 바로 접근 가능 삽입, 삭제가 어려움 → 해당 인덱스 주변에 있는 값을 이동시키는 과정 필요 배열의 크기는 선언 시 지정 가능, 한 번 선언한 후 크기를 늘리거나 줄일 수 없음 구조가 간단하여 코딩 테스트에서 많이 사용 리스트 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조 노드: 값, 포인터를 쌍으로 갖는 기초 단위 리스트의 특징 인덱스가 없으므로 head 포인터부터 순서대로 접근해야 함 → 접근 속도가 느림 포인터로 연결되어 있어 삽입/삭제하는 연산 속도가 빠름 크기를 별도로 지정하지 않아도 됨 → 가변 데이터에 적절 포인터를 저장할 공간이 필요하여 구조가 복잡
[Algorithm/Java] 디버깅 디버깅(Debugging): 문법/논리 오류를 찾아 바로잡는 과정 디버깅 방법 코드에서 디버깅하고자 하는 줄에 중단점 설정 IDE의 디버깅 기능을 이용해 변숫값이 의도대로 바뀌는지 파악 변숫값 이외에도 원하는 수식을 입력해 논리 오류 파악 가능 가장 하기 쉬운 실수: 자료형 범위 오류 변수를 처음부터 long으로 설정할 것
[Algorithm/Java] 시간 복잡도 시간 복잡도: 주어진 문제를 해결하기 위한 연산 횟수 1억번의 연산 → 1초로 간주 빅 오메가(Ω(n)): best case 빅 세타(θ(n)): average case 빅 오(O(n)): worst case → 코딩 테스트에서의 기준 버블 정렬: O(n^2) 병합 정렬: O(nlogn) 연산 횟수 = 시간 복잡도 * 데이터 크기 시간 복잡도 도출 기준 상수는 시간 복잡도 계산에서 제외 가장 많이 중첩된 반복문(이중 for 문이 있으면 그게 기준)의 수행 횟수가 시간 복잡도의 기준