일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 프로그래머스스쿨
- lv2
- 자바스크립트
- DFS
- CSS
- 문자열
- 백준
- level2
- programmers
- 스택
- 다이나믹 프로그래밍
- BASIC
- 그래프 탐색
- web
- JavaScript
- BFS
- 알고리즘
- DP
- 그리디 알고리즘
- 그래프 이론
- 그래프이론
- 웹 프론트엔드
- 딕셔너리
- 너비 우선 탐색
- 파이썬
- 프로그래머스
- 브루트포스 알고리즘
- 자료구조
- 정렬
- 구현
- Today
- Total
목록DP (8)
DevLog:-)

문제 숫자 변환하기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr dfs로 푼 코드이다. function solution(x, y, n) { let r = []; function fun(v,l){ //console.log(v+","+l) if(v === y){ r.push(l); return;} else if(v > y){ return } fun(v+n,l+1); fun(v*2,l+1); fun(v*3,l+1); return; } fun(x,0); if(!r.length){ return -1;} return Math.min(...r); } 결과.. 배열을..

문제 땅따먹기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음 문제를 풀 때 한 행에 값이 중복될 수 있다는 것을 고려하지 않고 풀어서 첫 번째 코드로는 통과되지 못했다. 중복 생각 안 한 코드 function solution(land) { var answer = 0; let max; let index; for(let i in land){ max = Math.max(...land[i]); index = parseInt(land[i].indexOf(max)); if(land[parseInt(i)+1]){land[parseInt(i)+1][index] =..

문제 문제 파악 가로 두 칸, 세로 N 칸인 우리에 사자를 배치하는 문제이다. 배치할 때 조건은 가로, 세로로 붙어 있게 배치할 수 없다는 것이다. N이 커질 수록 이전의 결괏값을 활용해서 풀 수 있는 문제이다. -> DP 규칙을 찾고 점화식을 찾아보자 예제 분석 N이 늘어날 수록 맨 밑에 칸이 추가된다고 생각하면 맨 밑에 칸에 사자를 어떻게 놓을 것이냐에 따라 개수를 찾고 규칙을 찾을 수 있다. 크게 두 가지(놓지 않는 경우, 놓는 경우)로 나눌 수 있다. N = 1 일때 : 놓지 않는 경우 (1) + 놓는 경우 (2) = 총 3 N = 2 일때 : 놓지 않는 경우 (3) + 놓는 경우 (2+2) = 총 7 N = 3 일때 : 놓지 않는 경우 (7) + 놓는 경우 (5+5) = 총 17 -놓지 않는 경..

문제 코드 import sys N = int(sys.stdin.readline()) dp =[0,-1,-1,1,-1,1]+[0 for i in range(N)] for i in range(6,N+1): dp[i] =-1 if(dp[i-3]!=-1 and dp[i-5]!=-1): dp[i] = min(dp[i-3]+1,dp[i-5]+1) elif(dp[i-3]!=-1): dp[i] = dp[i-3]+1 elif(dp[i-5]!=-1): dp[i] = dp[i-5]+1 print(dp[N]) 코멘트 Dp를 이용해서 풀었다. 제시된 무게를 3킬로그램과 5킬로그램 봉지로 나눌 때 봉지 수가 최소가 되도록 하는 문제이다. 제시된 무게까지 for문을 돌려서 dp리스트에 최소 개수를 계속 저장할 수 있도록 했다. 그..

문제 코드 n=int(input()) s=[int(input()) for _ in range(n)] dp=[0]*(n) # dp 리스트 if len(s)

문제 1. 초기 풀이 import sys N = int(sys.stdin.readline()) li = [list(map(int,sys.stdin.readline().strip().split())) for _ in range(N)] s =[0] for i in range(N-1,-1,-1): S = li[i][0] M = li[i][1] MAX = M if(i+S-1)>=N: li[i][1] = -1 continue for j in range(i+S,N): #해당 일자의 상담기간 이후 기간을 for문으로 돌면서 최대 금액을 찾는다. if(li[j][1] != -1 ): MAX = max(MAX, M + li[j][1]) li[i][1] = MAX #각 일자별 최대 금액으로 list를 갱신한다. s.app..

문제 1.BFS코드 import sys from collections import deque x = int(sys.stdin.readline().strip()) def fun(start_x): q= deque() q.append((0,start_x)) while(q): C, cur_x =q.popleft() if(cur_x==1): return C elif(cur_x!=0): if(cur_x % 3 == 0): q.append((C+1,cur_x//3)) if(cur_x % 2 == 0): q.append((C+1,cur_x//2)) q.append((C+1,cur_x-1)) print(fun(x)) #큐에 연산 횟수, 연산 결괏값을 넣어 와일문을 돌려서 1이 나올 때의 연산 횟수 반환했다. 2.DP코드..

문제 코드 import sys n = int(sys.stdin.readline()) R=[] for i in range(n): r,g,b = map(int,sys.stdin.readline().strip().split()) #strip왼쪽 공백 제거 if(i==0): RGB=[r,g,b] continue RGB = [min(RGB[1], RGB[2]) + r, min(RGB[0], RGB[2]) + g, min(RGB[0], RGB[1]) + b] print(min(RGB)) 집을 빨강,초록,파랑 중 하나의 색으로 칠해야하는데 이때 집마다 빨강,초록,파랑색을 칠하는 비용이 제공된다. i번째 집은 i+1번째 집과 색이 무조건 달라야하는 것이 특징이다. 이 문제는 DP로 풀이가 가능하다. 풀이방법 1번째 집..