Facts (사실, 객관)
- 알고리즘 문제를 풀 때, 사용할 수 있는 알고리즘 캠퍼스 에 대해서 알게 되었다.
Feelings (느낌, 주관)
-
그냥 무작정 문제를 푸는 것보다, 알고리즘 캠퍼스에 내용을 채워가면서, 문제를 풀면 좀 더 효율적으로 문제를 해결 할 수 있을 것이다.
-
테이블의 레이아웃을 변경하여, 마크 다운 형식으로 기록하기 편하게 변경해야할 것 같다.
Findings (배운 점)
주어진 정수형 배열에서 2개의 숫자를 선택하여 더한 값이 특정 목표값을 만들 때, 그 선택한 2개의 정수가 있는 배열의 인덱스를 반환하는 프로그램을 작성하라. 입력 값으로 주어지는 배열에는 정확히 하나의 정답이 존재하며, 같은 요소의 값을 중복해서 사용할 수 없다.
- 예를 들어서, 다음과 같은 문제가 있다고 가정을 했을 때 알고리즘 캠퍼스를 이용하면 다음과 같은 풀이가 가능하다.
제한 사항 (Constraints)
- 우선문제를 분석하고 제공하는 제한 사항을 기록하자.
1. 정수형 배열
2. 두 수의 합이 정수형을 초과할 수 있는가?
- 문제에 언급이 없다.
3. 두 수의 합이 배열 내에 무조건 존재하는가?
- 무조건 정확히 하나의 해결책이 존재한다.
4. 중복된 요소의 값을 2번 이상 사용하여, 결과값을 만들어서는 안된다.
아이디어 (Ideas)
- 아이디어는 여러 가지가 가능하다. 이를 통해서 시간 . 공간 복잡도를 구성해보고, 해당 아이디어를 코딩해봐야 한다.
아이디어 (Brute-force)
1. 배열의 모든 요소의 조합을 찾는다.
- 루프는 i = 0 ~ n, j = i + 1 ~ n으로 2중 루프를 구성한다.
- 1번째 루프 (n번), 2번째 루푸는 (n - 1)을 기준으로 n * (n - 1)로 계산하자.
2. 해당 조합으로 목표값과 비교하여 같다면 해당 로프를 종료하고 각 가진 인덱스를 반환한다.
시간 복잡도: O(n^2)
공간 복잡도: O(1)
아이디어 (Hash Tables)
1. 해시 테이블을 구성한다.
- 키 값으로는 배열의 요소, 값으로는 요소의 인덱스로 구성
2. 각 요소를 순회하면서,
- 목표값 - 현재 요소 = 다른 요소
- 해시 테이블에서 다른 요소의 값을 찾는다.
- 만약 다른 요소가 해시 테이블에 있다면, 현재 요소의 인덱스와 해시 테이블의 값(인덱스)를 반환한다.
- 다른 요소가 없다면, 현재 요소를 해시 테이블의 키 값으로 넣고 인덱스를 해시 테이블의 값 항목으로 추가한다.
시간 복잡도: O(N) 한번의 순회로 원하는 값을 찾을 수 있다.
공간 복잡도: O(N) 해시테이블의 생성하여 최대로 모든 요소 (N)을 담아야 한다.
코드(code)
- 글로 써놓은 아이디어를 코드로, 표현해보자. 사실 아이디어를 구체적으로 설계한다면 코드는 단지 표현하는 수단중 하나일 뿐이다.
테스트(Test Cases)
- 제한 사항에서 살펴본 내용과 함께 테스트 케이스를 만들어 본다.
Bad (개선할 점)
Goal and DueDate (목표 및 마감기한)
Affimation (자기 선언)
회고 작성법
- Facts(사실, 객관) 회사에서 실제로 내가 했던 일이나 겪었던 일의 사실을 적는다.
- Feelings(느낌, 주관) 내가 했던 일을 하면서 느꼈던 감정이나 느낌을 적는다.
- Findings(배운 점) 내가 했던 일을 통해서 새롭게 배운 점이나 알게 된 점을 적는다.
- Affirmation (자기 선언) 내가 했던 일을 통해 배운 점과 아쉬운 점을 어떻게 유지 하고 개선할지를 적는다.