왜 알고리즘을 배워야 할까?
알고리즘 문제 해결 경험을 통해 실제 개발에서 어떤 문제를 해결하는데 도움이 된다.
노트 레이아웃을 이용한 알고리즘 문제 풀이 접근 방법
- 문제 분석과 함께 어떤 알고리즘과 자료구조가 적절한지 파악한다.
- 문제로 부터 요구사항과 제한사항을 수집한다
- 어떤 식으로 접근할지 다양한 아이디어를 제시한다.
- 코딩을 통합개발 환경 도움 없이 화이트 보드나 종이에 연습한다
- 시간/공간 복잡도를 고려한다.
- 어떤 테스트 케이스를 통과하는지에 대해서 고려한다.
Constraints (범위, 제한사항)
문자열, 배열 그리고 숫자
- 배열을 얼마나 많은 요쇼들을 가질 수 있는가?
- 문자열의 경우 길이가 얼마나 길어질 수 있는가? 숫자의 경우 최댓값과 최솟값은 얼마인가?
- 어떤 요소들이 있는가? 숫자의 경우 정수 혹은 소수, 문자열이라면 byte 혹은 unicode 일 수 있다.
반환값
- 문자의 반환값은 어떤 형태이고 어떤 값을 원하는지 정확히 파악하자.
- 만약 문제에 다양한 해결책이 존재한다면, 어떤 해결책을 제공해야 하는 것인가?
- 만약 반환해야 하는 값이 여러개라면 어떤식으로 제공해야 하는지 확인하자
- 만약 입력값으로 허용되지 않거나 범위를 벗어나는 값이 들어왔을 때 어떤 값으로 반환해 줘야 하는지 파악할 필요가 있다.
- 문제에 어떤 특정 값을 찾는다고 했을 때 해당 값이 없다면 어떻게 반환을 할지 확인해야 한다.
Ideas (문제 풀이 접근 방법)
보통 문제 풀이 방식은 1~3개 정도다. 다양한 방법으로 접근하고 비교하여 최적의 답을 찾는 데 도움을 줄 것이다.
Complexity (복잡도)
시간 복잡도와 공간 복잡도를 고려하자
기본 자료구조 시간 복잡도(Big-O)
스택에서 삭제는 왜 O(1) 죠? pop만 고려하는건가… 배열은 다 옮겨줘야 하고
원하는 값을 삭제하려면 스택도 O(n)일 텐데
Code (코드 작성)
개발도구에 의존하지 않고 작성하는 연습을 해보자
- 코딩하기 전에 조금 더 고민하자
- 변수 이름을 명확하고 알맞게 정의하자
- 작은 단위의 논리적 조각으로 분해하여 분석하고 다른 코드와 섞이지 않도록 노력해야 한다.
- 자신이 작성한 코드를 여러 번 검토하자
Test Cases(테스트 케이스 검토)
- 에지 케이스(Edge case): 최극단의 값으로 테스트
- 해결책이 없는 경우: 입력값에 Null 또는 None 이 들어왔을 경우 어떻게 처리 해야 하는지 고민해야 한다.
- 다양한 테스트 케이스 : 여러 테스트 케이스를 스스로 생각해보는 연습도 필요하다.
'도서 > 프로그래밍' 카테고리의 다른 글
[쓰면서 익히는 알고리즘과 자료구조](2) 문자열(String) (0) | 2023.02.07 |
---|---|
[쓰면서 익히는 알고리즘과 자료구조](1) 배열(Array) (0) | 2023.02.06 |
[헤드퍼스트 디자인패턴](3) 데코레이터 패턴(Dacorator Pattern) (0) | 2023.01.25 |
[헤드퍼스트 디자인패턴](2) 옵저버 패턴 (0) | 2023.01.24 |
[헤드퍼스트 디자인패턴](1) 전략패턴 (0) | 2023.01.23 |