WiFi 칩 설계를 하기 위해, C 언어를 기본부터 차근히 다져보고자 한다.많은 분들이 근본 있는 책이라고 추천하는 "C Programming : A Modern Approach"이 얼마나 근본있는 책인지 하나씩 살펴보고자 한다.이 책을 모두 읽고 학습을 마쳤을 때,
대학원 박사 졸업 준비를 하면서, 동생과 함께 앱 출시까지 한다고 22년 연말을 정말 바쁘게 보냈었다. 백엔드 인강을 들으면서, 내가 혼자서 고민해서 만든 부분들을 어떻게 개선할 수 있을지 한 번 다시 되짚어보려 한다.
각 랜선을 정해진 크기로 잘랐을 때 몇 개가 나오는지 탐색해나가면 되는 문제이다. 이 때, 하나씩 올려가며 찾는 것은 시간이 n만큼 들기 때문에 절반씩 찾아가는 이분 탐색을 사용한다.
모듈러 연산은 더하기, 빼기를 하기 전에 미리 해도 유지되는 장점이 있다. 이 성질과 DP 접근 방식을 이용해 보자.
DP 접근 방식을 이용하여 선택한 숫자까지의 합을 쭉 더한 리스트를 생성한다. 주어진 i 번째 수부터 j 번째 수까지의 합을 구하고 싶다면, j 번째 DP 리스트에서 i 번째 DP 리스트를 빼주면 된다.
2차원 DP 표를 만들어서 풀이하면 된다. 집어넣는 물건의 개수와 최대 가방 무게를 이용하여 2차원 DP 리스트를 만든다.
주어진 문자열을 쪼개서 끝자리를 하나식 비교해나가는 과정으로 DP 표를 만들고 풀이할 수 있다.
이 문제는 수가 커지다가 작아지는 형태의 부분 수열을 구하는 것을 다루고 있다.
이 문제의 경우에는 어떤 수열인지는 구할 필요가 없고, 길이만 즉 포함된 숫자의 개수만 구하면 된다.
연속으로 3잔을 마실 수는 없기 때문에 포도주를 마시는 방법은 총 3가지로 분류할 수 있다. 지금 잔과 이전 잔을 마신다. 지금 잔만 마신다. 지금 잔을 마시지 않는다. 문제를 DP 방식으로 접근한다.
계단수는 끝자리 숫자가 무엇이냐에 따라서 이전 계단수들의 개수를 활용해서 구하면 된다.
계단을 오를 때, 지금 있는 위치에 오기 위해서는 두 가지의 경로가 있다. 2칸 전에서 2칸을 한 번에 오기. 3칸 전에서 2칸을 한 번에 옮겨 1칸 전으로 이동하고, 마저 1칸을 이동해 지금 칸으로 오기.