🗂️ 문제 링크: https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 💡 접근법 1을 만드는 방법은 1가지이고, 2를 만드는 방법은 (1+1), (2)로 2가지이고, 3을 만드는 방법은 (1+1+1), (2+1)*2, (3)으로 4가지이고, 4를 만드는 방법은 (1+1+1+1), (1+1+2)*3, (1+3)*2, (2+2)로 7가지이고, 5를 만드는 방법은 (1+1+1+1+1), (1+1+1+2)*4, (1+2+2)*3, (3+1+1)*3, (3+2)*2로 13가지이다. 이를 점화식으로 나타내면 dp[i] = dp[i-1] + dp[i-2] +..
전체 글
NoSQL의 등장 배경 NoSQL은 기본 RDBMS의 한계를 극복하기 위해 만들어진 새로운 형태의 데이터베이스로, 분산 환경에서 대용량의 데이터를 빠르게 처리하기 위해서 개발되었다. RDBMS의 한계 NoSQL이 등장하기 20년간, 데이터를 저장하는데는 RDBMS가 주로 사용되었다. 하지만 2009년 이후로 폭발적으로 데이터가 늘어나면서 RDBMS는 데이터를 처리하는 비용의 증가로 난관에 부딪힌다. 스키마 문제: 빅데이터를 RDB의 스키마에 맞춰 저장하려면 매우 긴 시간이 걸린다. 스케일업의 한계: 성능을 올리는 데에 비용의 한계가 있으며, 스케일 아웃 환경에서 RDBMS를 조작하는 것은 어렵다. Relational SQL vs NoSQL Relationl SQL NoSQL 데이터 저장 행과 열을 가진 ..
프록시(Proxy)란? “대리”, “대신”의 의미로, 내부 네트워크에서 인터넷 접속을 할 때에, 빠른 엑세스나 안전한 통신 등을 확보하기 위한 중계서버를 프록시 서버라고 한다. 클라이언트와 웹 서버의 중간에 위치하여 중계기로서 대리로 통신을 수행하는 역할을 한다. 이를 통해 클라이언트에겐 빠른 속도의 서비스를, 서버에게는 불필요한 부하를 줄이는 효과를 낼 수 있게 된다. 프록시(Proxy)의 종류 프록시는 포워드 프록시와 리버스 프록시로 나뉘며, 포워드 프록시는 클라이언트, 리버스 프록시는 서버쪽의 설정을 담당한다. 포워드 프록시 클라이언트 뒤에 위치한다. 내부망에서 클라이언트와 프록시 서버가 통신하여 인터넷을 통해 외부에서 데이터를 가져온다. 클라이언트가 인터넷에 직접 접근하는 것이 아니라, 프록시 서..
🗂️ 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 접근법 triangle[i][j]에 도달하는 방법은 두 가지 방법이 있다. 대각선 왼쪽에서 내려오는 경우에는 dp[i][j] = dp[i-1][j-1] + t 이다. 대각선 오른쪽에서 내려오는 경우에는 dp[i][j] = dp[i-1][j] + t 이다. 또한 인덱스가 0일 때(맨 왼쪽)는 오른쪽에서 내려오는 경우밖에 없고, -1일 때(맨 오른쪽)는 왼쪽에서 내려오는 경우밖에..
🗂️ 문제 링크: https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 💡 접근법 계단을 어떻게 올라갈까?가 아니라 계단을 어떻게 올라왔을까? 라는 관점에서 접근해야 한다. n번째 계단에 올라오기 위해서는 두 가지 경우가 있다. n-1번째 계단으로 오는 경우와 n-2번째 계단으로 오는 경우이다. n-1번째 계단으로 오는 경우에는 dp[n] = dp[n-3] + stairs[n-1] + stairs[n] 이다. n-2번째 계단으로 오는 경우에는 dp[n] = dp..
🗂️ 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/1845 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 접근법 최대한 많은 종류의 폰켓몬을 선택해야 하며, 선택할 수 있는 폰켓몬 종류 개수의 최댓값을 출력해야 한다. nums를 순회하면서 새로운 종류의 폰켓몬이 등장할 때마다 따로 저장해둔다. 이때 선택할 수 있는 폰켓몬 종류 개수의 최댓값은 N/2개이므로, 저장해둔 리스트의 길이가 N/2를 초과하면 안된다. 😎 내 코드 def solution(nums): answer = 0 te..
🗂️ 문제 링크: https://www.acmicpc.net/problem/24416 24416번: 알고리즘 수업 - 피보나치 수 1 오늘도 서준이는 동적 프로그래밍 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 오늘은 n의 피보나치 수를 재귀호출과 동적 프로그래밍 www.acmicpc.net 💡 접근법 DP로 풀 수 있는지 먼저 확인한다. 부분 문제가 반복적으로 나타나야 한다. 부분 문제의 최적 결과를 사용하여 전체 문제의 최적 결과를 낼 수 있다. DP 테이블을 초기화한다. 조건에 맞는 점화식을 구한다. 😎 내 코드 import sys def fib_recur(n): global recur_cnt if n == 1 or n == 2: recur_cnt..
🗂️ 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 접근법 투 포인터를 사용하여 리스트의 인덱스에 접근했다. while문을 통해 i≤r일 때만 반복문을 수행한다. 투 포인터의 이동 원칙은 다음과 같다. people[l] + people[r] ≤ limit: l += 1 , r -= 1 people[l] + people[r] > limit: r -= 1 이때 l==r이면 r-=1을 수행한다. 예시를 통해 자세히 살펴보자. peo..