[알고리즘] 알고리즘 1회차 수업(작성중)
알고리즘 공부를 할 때 효과적인 방법
- 답을 보는 것이 부끄러운 것이 아니다.
- 문제를 풀 수 있는만큼 많이 풀어보자
- 라이벌을 정해보자( 단 이길 수 있을 것 같은 사람으로)
프로그래밍에서 하는 흔한 실수
- 쉬운 문제를 어렵게 푸는 것
- 컴퓨터가 잘하는 것은 따로 있다
- 컴퓨터가 잘하는 것을 최대한 활용하자.
가능한 모든 경우의 수를 다 해보는 것이 중요하다!
- 재귀 호출은 완전 탐색을 구현하는데 아주 효율적인 도구
재귀 함수를 구현하는 방법은 정형화 되어 있음
1. 기저 사례를 작성한다 : 함수가 끝나는 시점을 기저 사례라고 한다.
2. 재귀 함수를 호출한다.
3. 값을 반환한다.
단어의 개수(BOJ 1152)
1. 여러 단어가 한 줄에 걸쳐 주어진다.
2. 각 단어는 공백으로 구분 된다.
3. 입출력의 원리를 이해하고 있어야 한다.
단어 공부(BOJ 1157)
- 단어를 소문자 혹은 대문자로 변환
- 변환된 단어에 대해 사용된 알파벳의 수를 확인(아스키 코드)
- 아스키 코드를 활용하면 아주 쉽게 셀 수 있음. 알파벳 카운팅 배열 이용
- 문자 비교는 아스키 코드로 비교를 하게 된다.
- 대문자와 소문자를 비교할 때는 아스키 코드 32 만큼 차이가 난다.
최소공배수(BOJ 1934)
- 최소공배수를 어떻게 구할까?
1. A, B의 최대공약수를 gcd라 하자.
2. A, B의 최소공배수는 A * B / gcd로 계산이 가능하다.
3. gcd는 유클리드 호제법으로 쉽게 구할 수 있다.
A B
128 76
76 52
52 24
24 4
4 0
부분집합의 개수의 합
단어 나누기
- 케이스가 많지 않기 때문에 최적해보다는 전부다 해보는 것이 맞다.
- 만들 수 있는 모든 케이스를 만들어라.
-
팀원 구하기
- 비트 연산자로 이진수를 만들어서 각팀원이 풀수 있는 문제의 인덱스를 1로 표시한다.
-