일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Kruskal
- 모각코
- 실습
- B대면노래방
- Planned
- codetree
- minimum spanning tree
- 프로그래머스
- programmers
- MyPlaylist
- DFS
- BFS
- 최소스패닝트리
- 그리디알고리즘
- 장고
- 종합설계
- SQL
- DP
- Bellman-Ford
- 마라마라빔
- 소프트웨어공학
- 백준
- 동적계획법
- django
- 알고리즘
- 함밥
- 백트래킹
- 코드트리
- 파이썬
- 데이터베이스
Archives
- Today
- Total
Leta Learns
[모각코] 210707 Today I Learned 본문
그리디 알고리즘 공부
2021.06.29 - [HUFS/Algorithm] - Greedy Algorithm (그리디, 욕심쟁이 알고리즘)
Greedy Algorithm (그리디, 욕심쟁이 알고리즘)
1. Greedy Algorithm : 당장 눈 앞에 보이는 최적의 상황만을 쫓는 알고리즘 Greedy 알고리즘은 최적해를 구하는 상황에서 사용하는 방법이다. 여러 경우 중 하나를 선택할 때 그 상황에서 가장 좋다고
letalearns.tistory.com
<백준 18234번 - 당근 훔쳐 먹기>
예제는 맞는데 시간 초과가 난다. 이중 for문을 사용해서 그런 것으로 추정되는데 이중 for문 안 쓰고 푸는 방법이 도무지 생각나지 않는다.
코드 길이라도 줄여보려고 다른 방식으로 코드를 하나 더 작성했으나 이것도 이중 for문을 사용해서인지 시간 초과가 났다.
나름 그리디로 푼다고 풀은 건데, 시간복잡도 줄여야 한다는 생각에 나중에는 그냥 막 짠 것 같다. ㅋㅋ
어쨌든 결과적으로 틀린 코드라서 올릴까 말까 고민하다가... 나중에 나도 다시 봐야 하고, 혹시나 누군가 이걸 보고 ... 나에게 피드백을 줄 수도 있지 않을까.. 하는 마음에 올린다.
#처음에 만든 코드
import sys
n, t = map(int, sys.stdin.readline().split()) #n:당근 종류, t:재배일수
w = [0 for i in range(n)] #당근 기본 맛
p = [0 for i in range(n)] #영양제
for i in range(n):
w[i], p[i] = map(int, sys.stdin.readline().split())
total_w = 0 #맛의 합
for i in range(1, t+1):
if i <= t-n: #t-n일 전까지는 당근 훔쳐먹지 x
for j in range(n):
w[j] += p[j]
elif i == t: #마지막 날
total_w += w[0]
else:
min_p = min(p) #영양제로 인해 증가하는 값이 가장 적은 경우
index = p.index(min_p)
total_w += w[index]
w.remove(w[index])
p.remove(min_p)
for j in range(len(w)):
w[j] += p[j]
print(total_w)
#시간복잡도 줄여보겠다고 다시 만든 코드
import sys
n, t = map(int, sys.stdin.readline().split()) #n:당근 종류, t:재배일수
w = [0 for i in range(n)] #당근 기본 맛
p = [0 for i in range(n)] #영양제
for i in range(n):
w[i], p[i] = map(int, sys.stdin.readline().split())
total_w = 0 #맛의 합
for j in range(n):
w[j] += p[j]*(t-1)
for i in range(t, 0, -1):
max_w = max(w)
total_w += max_w
index = w.index(max_w)
w.remove(max_w)
p.remove(p[index])
if i == t-n+1:
break
else:
for j in range(len(w)):
w[j] -= p[j]
print(total_w)
풀었다 !
'HUFS > HUFS 모각코 캠프' 카테고리의 다른 글
[모각코] 210724 Today I Learned (2) | 2021.07.24 |
---|---|
[모각코] 210721 Today I Learned (0) | 2021.07.22 |
[모각코] 210717 Today I Learned (0) | 2021.07.17 |
[모각코] 210714 Today I Learned (0) | 2021.07.14 |
[모각코] 210710 Today I Learned (0) | 2021.07.10 |
Comments