책(2)
-
책읽기003)프로그래밍 면접 이렇게 준비한다 - 3
1. 순환형 연결리스트 여부알아보기순환형인지 아닌지 판단하는 알고리즘을 찾는것.일단 먼저 떠오르는 방법은 노드에 한번 지나간 자리인지 확인하는변수를 선언하고 변수를 체크해 순환형을 가려낼 수 있다.하지만 이렇게 푸는건 적절한 문제 풀이가 아니다! 적어도 면접관에겐!- 노드에 변수를 넣는것은 노드를 수정한다는 의미. 최대한 노드 수정 없이! 2. 해결방법토끼와 거북이 알고리즘! Tortoise and Hare 알고리즘이다.2개의 포인터의 증감률을 다르게 하여 탐색한다.이 알고리즘의 장점은 특히 비순환일때 탐색 속도가 n/2로 줄어든다.빠르게 뛰는 토끼포인터가 거북이 포인터와 같아지거나 앞지르게 되면 이것은 순환형!빠르게 뛰는 토끼포인터가 널 포인터를 만난다면 이것은 비순환형이 되는것이다. 위키에서 퍼온 것..
2015.02.26 -
책읽기003)프로그래밍 면접 이렇게 준비한다 - 2
1. 디버거를 쓰지 않고 체계적 분석, 중점적으로 살펴봐야 할 부분- 데이터가 함수에 제대로 들어오는지 확인한다.- 함수의 각 줄이 제대로 작동하는지 확인한다.- 함수에서 데이터가 올바르게 나오는지 확인한다.- 흔히 발생하는 오류 조건을 확인한다. 2. 연결 리스트의 마지막에서 m번째 원소 찾기문제단일 연결 리스트가 주어졌을 때 리스트의 맨 뒤에서 m번째 원소를 찾아내는 알고리즘을 만들어 보라.이때 시간 및 공간 효율을 모두 고려해야 한다. 오류 조건의 처리에 주의하여 알고리즘을 구현하라.여기에서 "맨 뒤에서 m번째 원소"는 m = 0일 때 리스트의 마지막 원소를 변환하는 식으로 생각한다. 순차적으로 찾는 방법가장 기본적인 알고리즘은 Head에서부터 Tail까지 리스트를 종주하고 전체 리스트를 체크한다...
2015.02.20