728x90
4796. 캠핑
testcase = 0
while True:
testcase += 1
l, p, v = map(int, input().split())
if l+p+v == 0:
break
if v%p < l:
using_day = (v//p)*l + v%p
elif v%p >= l:
using_day = (v//p)*l + l
print(f'Case {testcase}: {using_day}')
v%p와 l의 대소관계를 고려하지 않아 계속 틀린 문제
알고리즘을 제대로 생각하고 풀기 시작해야겠다.
11047. 동전 0
N, K = map(int, input().split())
coinlist = []
coinnum = 0
for i in range(N):
coinlist.append(int(input()))
coinlist.sort(reverse = True)
for i in coinlist:
if i > K:
pass
else:
coinnum += K // i
K = K % i
print(coinnum)
어릴 때 많이 풀어서 익숙하다. sort(reverse = True)를 잘 활용하자
17509. And the Winner Is... Ourselves!
T = []
V = []
totalT = 0
tlist = []
for i in range(11):
a, b = map(int, input().split())
T.append(a)
V.append(b)
T.sort()
for i in T:
tlist.append(totalT + i)
totalT += i
print(sum(tlist) + 20*sum(V))
영어 문젠데, 문제를 제대로 이해하기 힘들었다.
totalT += totalT + i 형식으로 시간의 합을 구하려 했으나 계속된 오답으로 그냥 하나씩 append하는 식으로 바꿨다.
1931. 회의실 배정
#1차 제출
N = int(input())
meetings = []
meetingnum = 0
numlist = []
for i in range(N):
m = list(map(int, input().split()))
meetings.append(m)
meetings.sort()
for i in meetings:
numlist.append(meetingnum)
meetingnum = 1
endtime = i[1]
for j in range(N):
if meetings[j][0] >= endtime:
meetingnum += 1
endtime = meetings[j][1]
print(max(numlist))
원래 2중for문을 이용해 해결하려고 했으나 시간 초과로 다른 방법 찾기..
#2차 제출
N = int(input())
meetings = []
meetingnum = 1
for i in range(N):
m = list(map(int, input().split()))
meetings.append(m)
meetings.sort(key = lambda x: (x[1], x[0]))
endtime = meetings[0][1]
for i in range(1, N):
if meetings[i][0] >= endtime:
meetingnum += 1
endtime = meetings[i][1]
print(meetingnum)
가장 빠른 회의 종료시간을 찾아가는 식으로 해결했다. 2차원 배열 구조에서 빛을 발한 lambda... 정확한 원리를 이해할 필요가 있을 것 같다.
그리디는 약간의 타고난 직관이 있으면 정말 편할듯...
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준]230124 문제풀이 (0) | 2023.01.24 |
---|---|
[백준]230121 문제풀이 (2) | 2023.01.21 |
[백준]230119 문제풀이 (0) | 2023.01.20 |
[백준]230118 문제풀이 (0) | 2023.01.18 |
[백준]230116 문제풀이 (0) | 2023.01.16 |
댓글