728x90
반응형

 

 

acmicpc.net/problem/2217

 

2217번: 로프

N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하

www.acmicpc.net

# 2217

n = int(input()) # 로프의 수 
data = []

for i in range(n):
  data.append(int(input()))

data.sort(reverse=True)

max_w = []

for i in range(n):
  max_w.append( data[i]*(i+1))

print(max(max_w))

 

 

너무 어렵게 생각하지 않는 것이 중요하다.

기본적으로 입력받은 중량 값을 역으로 정렬하여 사용한다. 

 

우선, 가장 기본적으로 들 수 있는 중량은 제일 큰 로프의 중량 값이다.

2가지의 로프를 사용한다면, 

가장 큰 로프는 그다음으로 큰 로프보다 항상 크므로 

두 번째 로프의 2배만큼의 중량을 들 수 있을 것이다. 

 

3가지의 로프를 사용하고.. 그 이상의 로프를 사용한다고 해도 마찬가지이다. 

 

이렇게 새로운 배열을 만들고 나서 가장 큰 값을 고르면 된다. 

 

 

 

728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

#13305 주유소 파이썬  (0) 2021.03.08
# 4796 캠핑  (0) 2021.03.08
# 1439번: 뒤집기  (0) 2020.10.15
# 1931 회의실 배정  (0) 2020.09.18
# 14720 우유 축제  (0) 2020.09.18
728x90
반응형

 

 

 

www.acmicpc.net/problem/13305

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net

 

# 13305 

n = int(input()) # 도시의 수 
dist = list(map(int, input().split() ))
cost = list(map(int, input().split() ))

# 처음 출발할 때, 무조건 기름 필요 
total = cost[0]*dist[0]
m = cost[0]

# 나보다 작은 값이 나오면 그 이후로 그 값으로 계산 
# 마지막 나라의 가격은 사실상 사용되지 않으므로 무시 가능 
for i in range(1,n-1):
  if cost[i] < m : 
    total += dist[i] * cost[i]
    m = cost[i]
  else : 
    total += dist[i]*m

print(total)

 

+) 주의사항 

만약에 계속 min 함수를 이용해서 최솟값을 찾고자 하면 시간 초과 오류가 날 수 있음. 

처음에 아래와 같이 코드를 작성했더니 시간 초과 오류가 남. 

# 13305 

n = int(input()) # 도시의 수 
dist = list(map(int, input().split() ))
cost = list(map(int, input().split() ))

# 처음 출발할 때, 무조건 기름 필요 
total = cost[0]*dist[0]

# 가장 작은 값 이후로는 다 작은 값으로 계산 
e = len(cost)
while e > 1 : 
  cost = cost[:e] 

  small = min(cost)
  s_i = cost.index(small)

  # print("최소값은", small, "index : ", s_i)

  for i in dist[s_i:e] :
    total += small* i
    #print('total: ', total)
    #print(dist[s_i:e])

  e = s_i

if e == 0 : 
  total -= cost[0]*dist[0]

print(total)
728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

# 2217 로프  (0) 2021.03.08
# 4796 캠핑  (0) 2021.03.08
# 1439번: 뒤집기  (0) 2020.10.15
# 1931 회의실 배정  (0) 2020.09.18
# 14720 우유 축제  (0) 2020.09.18
728x90
반응형

www.acmicpc.net/problem/4796

 

4796번: 캠핑

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.

www.acmicpc.net

 

# 4796

data = [] 
while True : 
  L, p, v = map(int, input().split() ) 
  if L + p + v == 0 : 
    break 
  else : 
    data.append([L,p,v])

for i in data : 
  L, p, v = i[0], i[1], i[2]

  cnt = ( v//p )*L
  re = v - p*(v//p)

  if re <= L :
    cnt += re
  else : 
    cnt += L
  
  print("Case",str(data.index(i)+1)+":",cnt)

 

 

728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

# 2217 로프  (0) 2021.03.08
#13305 주유소 파이썬  (0) 2021.03.08
# 1439번: 뒤집기  (0) 2020.10.15
# 1931 회의실 배정  (0) 2020.09.18
# 14720 우유 축제  (0) 2020.09.18
728x90
반응형
S = input()
count = 1
for i in range(len(S)-1):
    if S[i] != S[i+1]:
        count += 1
print( count//2 )

 

바뀌는 것을 세면, 실제 바뀐 것은 1번 인데 앞, 뒤로 카운트 되기 때문에 마지막에 2로 나누어 준다. 

처음 시작 할 때 바뀌는 것은 1 번만 카운트 되므로 count = 1 부터 시작한다. 

728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

#13305 주유소 파이썬  (0) 2021.03.08
# 4796 캠핑  (0) 2021.03.08
# 1931 회의실 배정  (0) 2020.09.18
# 14720 우유 축제  (0) 2020.09.18
# 11047 동전 0  (0) 2020.09.02
728x90
반응형
n = int(input()) # 회의의 수 

data=[]
for i in range(n):
  data.append(list(map(int,input().split())))   # [ 시작시간, 끝나는 시간 ]

data=sorted(data, key = lambda x: (x[1],x[0]) )

cnt= 0
m = 0

for meet in data:
  if meet[0] >= m : 
    cnt += 1 
    m = meet[1]

print(cnt)

 

step1) 가장 빨리 끝나는 순서로 정렬한 수, 시작 시간 별로 정렬한다. 

step2) 제일 처음으로 , 가장 빨리 끝나는 강의가 포함된다. 

step3) 그 이후로는, 앞의 강의가 끝나는 시간에 가장 가깝게 시작되는 강의를 배치하고 그 강의 끝에 다시 가장 가까운 강의를 배치한다. 

 

 

 

https://www.acmicpc.net/problem/1931

 

1931번: 회의실배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

 

728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

# 4796 캠핑  (0) 2021.03.08
# 1439번: 뒤집기  (0) 2020.10.15
# 14720 우유 축제  (0) 2020.09.18
# 11047 동전 0  (0) 2020.09.02
# 1541 잃어버린 괄호  (0) 2020.09.02
728x90
반응형
n = int(input()) # 1<=n<=1000
data= list(map(int,input().split()))

k = 0 
cnt = 0 

for i in data:
  if i == k : 
    cnt += 1 
    k = ( i + 1 ) %3 

print(cnt)

 

728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

# 1439번: 뒤집기  (0) 2020.10.15
# 1931 회의실 배정  (0) 2020.09.18
# 11047 동전 0  (0) 2020.09.02
# 1541 잃어버린 괄호  (0) 2020.09.02
# 2839 설탕배달  (0) 2020.09.02
728x90
반응형
# 11047
n, k = map(int, input().split())

data=[int(input()) for i in range(n)]
data.reverse()

cnt = 0

for i in data:
  if k >= i :
    cnt += k//i
    k %= i

print(cnt)
728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

# 1931 회의실 배정  (0) 2020.09.18
# 14720 우유 축제  (0) 2020.09.18
# 1541 잃어버린 괄호  (0) 2020.09.02
# 2839 설탕배달  (0) 2020.09.02
# 10162 전자레인지  (0) 2020.09.02
728x90
반응형

#1 런타임 에러 

# 1541
# + - () 로 최소.. 
# 빼는 값을 최대로 만들자. 
# -뒤에 - 나올 때 까지 괄호로 묶기 
eq = input()
# -가 나오면 다음 - 나올 때 까지 더하기
# 그냥 +가 나오면 더하기 

# cnt = 0 -가 한번도 안나옴
# cnt = 1 -가 홀수번 나옴
# cnt = -1 -가 짝수번 나옴
cnt=0
index=0
for i in eq:
  print(i)
  index += 1 
  if i == '-':
    if cnt < 1 :
      eq = eq[:index] + '(' + eq[index:]
      cnt = 1
    else :
      eq = eq[:index] + ')-(' + eq[index+1:]
      cnt = -1 

if cnt == -1 :
  eq = eq+ str(')')

print(eval(eq))

 

# 또 런타임 에러... 

eq = input().split('-')

result=int(eq[0])

for i in eq[1:]:
  print(eval(i))
  result -= int(eval(i))

print(result)

 

# 해결 

eq = input().split("-") 
eq = [sum(map(int, c.split("+"))) for c in eq]
print(-sum(eq) + 2*eq[0])
728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

# 14720 우유 축제  (0) 2020.09.18
# 11047 동전 0  (0) 2020.09.02
# 2839 설탕배달  (0) 2020.09.02
# 10162 전자레인지  (0) 2020.09.02
# 5585 거스름돈  (0) 2020.09.02
728x90
반응형
# 2839
# 3 kg, 5 kg 

n = int(input())
a=0
b=0

# n = 5a + 3b

if (n%5 == 0) :
  a = int(n/5)
  print(a)
  
else:
# 5에 곱해질 수 있는 가장 큰 수부터 하나씩 줄여가면서 test 
  c = int(n/5)
  while c>=0 :
    if ( n-5*c )%3 == 0 :
      a = c
      b = int((n-5*c)/3)
      print(a+b)
      break
    else :
      c -= 1 
    if (c == -1):
      print(-1)
    
728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

# 11047 동전 0  (0) 2020.09.02
# 1541 잃어버린 괄호  (0) 2020.09.02
# 10162 전자레인지  (0) 2020.09.02
# 5585 거스름돈  (0) 2020.09.02
# 11399 ATM  (0) 2020.09.02
728x90
반응형
# 10162
# A는 5분 = 300초 
# B는 1분 = 60초 
# C는 10초 

t = int(input())
a=0
b=0
c=0

if t % 10 !=0 : 
  print('-1')
else:
  a = int(t/300)
  t %= 300
  b = int(t/60)
  t %= 60
  c = int(t/10)
  print(a,b,c, end=' ')
728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

# 1541 잃어버린 괄호  (0) 2020.09.02
# 2839 설탕배달  (0) 2020.09.02
# 5585 거스름돈  (0) 2020.09.02
# 11399 ATM  (0) 2020.09.02
# 14241 슬라임 합치기  (0) 2020.09.02

+ Recent posts