https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 해설 : N개의 집이 있고 집을 색칠하는데 드는 비용이 R, G, B 색깔별로 주어진다. 이 집을 R, G, B의 색들 중 하나로 색칠하려 할 때, 인접하는 집 끼리는 색이 같지 않게 색칠하는 방법 중 비용이 가장 적게 드는 경우의 비용을 찾는 문제이다. 풀이 : DP문제이다. 0번째 집부터 각 집마다 색칠하는데 드는 총 비용중 최솟값만을 갱신하며 계산한다. 핵심은 인접한 집..
https://programmers.co.kr/learn/courses/30/lessons/12945 코딩테스트 연습 - 피보나치 수 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = programmers.co.kr 해설 : 2 이상의 n이 입력되었을 때, n 번째 피보나치 수를 1234567로 나눈 나머지를 출력하면 된다. 풀이 : DP의 가장 대표적인 문제이다. n-1과 n-2번째의 값을 더하여 n..
https://programmers.co.kr/learn/courses/30/lessons/12913 코딩테스트 연습 - 땅따먹기 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟 programmers.co.kr 해설 : N개의 행과 4개의 열로 이루어진 배열이 주어질 때 0번째 행부터 한 행씩 증가하며 4개의 열들 중 하나를 밟는다. 이 때, 직전에 밟았던 열은 밟을 수 없다. N번째 행까지 도달하였을 때 밟고 내려올 수 있는 칸들의 총합 중 가장 큰 값을 찾는 문제이다. 풀이 : DP를 이용하여 해결할 수 있는 문제이다. 각 열마다 선택할 수 있는..
https://programmers.co.kr/learn/courses/30/lessons/12900 코딩테스트 연습 - 2 x n 타일링 가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 programmers.co.kr 해설 : 자연수 n이 주어질 때, 세로의 길이가 2이고 가로의 길이가 n인 공간에 2x1 또는 1x2 모양의 타일을 가득 채우려고 한다. 이 때 채울 수 있는 가짓수를 출력하면 된다. 풀이 : DP문제이다. 종이에 그림을 그려가며 가짓수를 체크해 보았는데 n이 5정도 되었을 때 규칙이 보였다. n이 1씩 증가하면 n-1을 채우는 경우와 n-2를 채우..
https://programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 programmers.co.kr 해설 : 주어진 수 N을 사칙연산만으로 조합하여 targetNumber를 찾는데에 몇 번의 연산이 필요한지 찾는 문제이다. 풀이 : 사칙연산을 진행하며 나온 결괏값을 중복을 방지하기 위해 set 자료구조로 list에 append 한다. 이 결괏값 배열의 원소들에 반복적으로 N으로 사칙연산을 수행하여 targetNumber가 나올 때까지 횟수를 카운팅한다. 123456789101112131415161718192021def solution(N, number): S = [0, {N}] if N == number: return 1 for i in ..