본문 바로가기
알고리즘 문제/자료구조&알고리즘

그리디 기출

by 태윤2 2020. 10. 24.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 모험가 길드
= 5
guild = [2,3,1,2,2]
guild.sort()
 
result = 0
count = 0
 
for i in guild:
  count +=1
  if count>= i: 
    result +=1
    count = 0
print(result)
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
# 곱하기 혹은 더하기
= '02984'
sum = int(s[0])
for i in range(1,len(s)):
  num = int(s[i])
  if num <=1 or sum <= 1:
    sum +=num
  else :
    sum *=num
print(sum)
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 문자열 뒤집기
 
data = '0001100'
count0 = 0
count1 = 0
 
if data[0== '1':
  count0 +=1
else:
  count1 +=1
 
for i in range(len(data)-1):
  
  if data[i] != data[i+1]:
      if data[i+1== '1':
        count0 +=1
      else:
        count1 +=1
 
# print(min(count0,count1))
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
# 만들 수 없는 금액
 
= 5
data = [1,1,2,3,9]
data.sort()
target = 1
 
for x in data:
  if target < x:
    break
  target +=x
print(target)
 
cs

 

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
31
# 볼링공 고르기
= 8
= 5
weight = [1,5,4,3,2,4,5,2]
 
 
count = 0
 
for i in range(len(weight)):
  for j in range(i+1,len(weight)):
    if weight[i] != weight[j]:
      count +=1
 
print(count)
 
 
# 답지
# 1부터 10까지의 무게를 담을 수 있는 리스트
array = [0* 11
for x in weight:
  # 각 무게에 해당하는 볼링공의 개수 카운트
  array[x] +=1
 
result = 0
# 1부터 m 까지의 무게에 대하여 처리
for i in range(1, m+1):
  n -= array[i] # 무게가 i 인 볼링공의 개수(A가 선택할 수 있는 개수) 제외
  result += array[i] * n # B 가 선택하는 경우의 수와 곱하기
 
print(result)
 
cs

 

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
31
32
33
# 무지의 먹방 라이브
import heapq
 
def solution(food_times, k):
    answer = 0
    # 전체 음식을 먹는 시간보다 k가 크거나 같다면 -1
    if sum(food_times) <= k:
      return -1
    # 시간이 작은 음식부터 빼야 하므로 우선순위 큐를 이용
    q = []
    for i in range(len(food_times)):
      heapq.heappush(q, (food_times[i],i+1))
    
    
    sum_value = 0 # 먹기위해 사용한 시간
    previous = 0 # 직전에 다 먹은 음식 시간
    length = len(food_times) # 남은 음식의 개수
    # sum_value + (현재의 음식 시간 - 이전 음식 시간) * 현재 음식 개수와 k 비교
    while sum_value + ((q[0][0- previous) * length) <= k:
      now = heapq.heappop(q)[0]
      sum_value += (now-previous) * length
      length -= 1 # 다 먹은 음식 제외
      previous = now # 이전 음식 시간 재설정
 
    # 남은 음식 중에서 몇 번 째 음식인지 확인하여 출력
    answer = sorted(q, key = lambda x: x[1]) # 음식의 번호 기준으로 정렬
 
 
    return answer[(k - sum_value) % length][1]
 
 
 
 
cs

 

 

 

'알고리즘 문제 > 자료구조&알고리즘' 카테고리의 다른 글

DFS/BFS 문제  (0) 2020.10.25
구현 기출  (0) 2020.10.24
기타알고리즘(리스트)  (0) 2020.10.24
기타 알고리즘(소수)  (0) 2020.10.24
그래프 이론  (0) 2020.10.24