일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 알고리즘
- 브루트포스 알고리즘
- level2
- 다이나믹 프로그래밍
- 정렬
- 스택
- BASIC
- 백준
- DFS
- 구현
- 그래프이론
- 그리디 알고리즘
- programmers
- 딕셔너리
- CSS
- 그래프 탐색
- 그래프 이론
- 웹 프론트엔드
- DP
- 프로그래머스스쿨
- 자바스크립트
- 자료구조
- JavaScript
- 문자열
- BFS
- 너비 우선 탐색
- web
- 파이썬
- 프로그래머스
- Today
- Total
목록그리디 알고리즘 (4)
DevLog:-)

문제 코드 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리스트에 최소 개수를 계속 저장할 수 있도록 했다. 그..

문제 코드 import sys N,M = map(int,sys.stdin.readline().strip().split()) arr = [] for i in range(N): arr.append(list(map(str,sys.stdin.readline().strip()))) answer='' sum =0 for i in range(M): map ={"A":0, "C":0,"G":0 ,"T":0} for j in range(N): map[arr[j][i]] +=1 m = max(map,key=map.get) answer+=m sum += (N- map[m]) map.clear print(answer) print(sum) #answer=[](append)와 answer=""(+=)의 차이 코멘트 문제를 한 번..

문제 코드 import sys n = 1000-int(sys.stdin.readline()) M = [500, 100, 50, 10, 5, 1] count = 0 for money in M: if n == 0: break count += n // money #금액이 큰 거스름돈 먼저 잔돈 개수 계산 n %= money print(count) 문제설명 잔돈의 개수가 최소가 되도록 해야 하는 문제이다. 접근방법 그리디 알고리즘을 사용한다. 코드설계 -액수가 큰 지폐를 최대한 많이 사용해야하기 때문에 가장 큰 잔돈 500부터 내림차순으로 M에 저장한 후 for문을 돌린다. -for문을 돌면서 money로 거스름돈을 나눈 몫(해당 잔돈 개수)을 결괏값에 더한다. -그 후에 남은 거스름돈을 계산하고 남은 거스름돈..

문제 소스코드 import sys from collections import deque n,b = map(int,sys.stdin.readline().split()) q= deque() q.append([n,1]) #현재 값과 레벨과 넣기 f=0 while(q): k=q[0] if(k[0]==b): #맨 앞에 칸이 b와 같은지 확인 print(k[1]) f=1 break else: q.popleft() #다를 경우 큐에서 빼내고 해당 값에서 파생된 값 갱신 if(k[0]*2