기본
절대 답을 먼저 살피지말고 직접 풀이한다
본론
1.경청(정독)하라
- 기본중에 기본이다. 모든 조건과 상황(반복되는것인가 정렬이 이미되어있는것인가 등)을 정확히 알아야한다.
2.예제를 직접 작성하라
- 머릿속에서만 생각한 후 곧바로 문제를 풀지말고 예제를 작성하여 테스트하라
- 이때,
문제에맞는 실제 숫자와 문자열을 사용하며, 특별한 케이스의 예제는 지양한다
- 크기가 크며 구체적인 예제를 만든다.
3.무식하게 먼저 푼다.
- 2번예제를 통해만들어진
문제에적합하고, 크기가크며, 구체적인예제를 바탕으로 직관적으로 풀어본다.
- 복잡한 제약조건은 단순화해도 괜찮다.
- 첫 알고리즘이 형편없어도 괜찮다.
4번에서 개선해나가면 된다.
4.최적화한다.
- 1번에서 인지한 정보중 놓친 정보가 있는지 체크한다.
- 2번의 방향성으로, 더 추가적인 예제로 테스트를한다.
- BUD를 활용하여 최적화한다.
- 시간,공간복잡도를 생각하여 최적화한다.
*BUD란?
병목현상(Bottlenecks)
- O(n)작업과 O(nLogN)작업이 같이 이루질 때, O(n)작업을 O(logN)으로 줄이는것은 의미가없다.
즉, 실제로 병목현상이 발생하는 구간을 최적화해야한다.
- 반복적으로 일어나는 구간을 O(1)에 가깝게 최적화하는것은 굉장한 효율을 불러온다.
불필요한작업(Unnecessary Work)
중복되는 작업(Duplicated Work)
5.검토하라.
- 코딩을 시작하기전에 '완벽'에 가까운 상태를 만들어 둔 후 코딩을 시작해야한다. 다시검토하자.
- 완벽에 가까우려면 코드도 얼추 나와야한다.
6.코드를 작성하라.
- 1~5번의 과정을 통해 나오는 코드는 첫 시작부터 설계가 된것이다.
- 모듈화된 코드를 작성하고, 검증이 필요한 코드도 추가한다.
- 이 때, 좋은 변수명을 사용한다.
- 의사코드보다는 실제코드에 가깝게 작성해야한다.
7.테스트한다.
- 2번, 4번의 예제로 테스트한것은 일반적인경우였을 것이다.
- 이 때에는 상세한부분까지 테스트를한다.
7.1.개념적 테스트부터 시작한다.
(코드를 한줄한줄 읽어내려가며 분석한다. 면접관에게 설명하듯이)
7.2.코드가 평소와 다르게 돌아가는부분을 유심히 살핀다
(예를들어, for(int i=0; 이 아니라 for(int i=2; 로 동작하는 코드와 같이 일반적이지 않은 부분들을 의미)
7.3.버그가 자주 발생하는 부분을 체크
(NULL체크, 정수나눗셈, 등)
7.4.특별한경우를 테스트한다.
NULL, 단일원소, 극단적인일벽 등 ..)
8.코딩한다.
즉 1~7번까지 손으로 해야한다.
코딩은 마지막 표현의 수단일 뿐.
시간은 오래거리지만 문제를 즈려밟겠네요.
이런 방법론을 적용해보고자 시스템을 구축하려고합니다.
1.
먼저 github에 레포를 팔것인데,
이곳에는 알고리즘문제풀이내용을 저장할것입니다.
2.
각 문제는 디렉토리구조로 저장됩니다.
알고리즘 > 문제정보(백준넘버, 프로그래머스넘버, 문제이름) > 코드파일, 이미지파일
3.
이때의 이미지파일은 방법론 1~7의 경과입니다.
4.
이미지파일을 기반으로 코드를 작성하고,
이후의 리팩토링에 대해서는 깃헙의 커밋내용에 의존합니다.
(종이에 작성하는것의 한계로, 지속되는 리팩토링을 종이에 반영하면 지저분해질것이라 판단)
해보긴할건데,
솔직히 잘 될지는모르겠습니다.
뭐 하다보면
이 방법을 버리거나
그대로 따르거나
아니면 저에게맞는 더 나은 방법을 찾아가곘죠.
'재학습 > 알고리즘' 카테고리의 다른 글
[boj_2231][GO] 분해합 (0) | 2023.08.15 |
---|---|
[BOJ 1978] 소수찾기 (에라토스테네스의 체 란?) (0) | 2023.08.14 |
[BOJ 11050] 이항계수 1 (0) | 2023.08.13 |
[BOJ 2609] 최소공약수, 최대공배수 (유클리드호제법) (0) | 2023.08.12 |
[백준] 백준걸음마 자바 , 컴파일 에러 클래스 명? (0) | 2022.06.10 |