처음에는 아래와 같이 풀려고 했다
3월 1일보다 시작일이 같거나 작은 첫번째 꽃을 고르고
(만약 종료일이 이전 꽃보다 길다면 그 꽃을 시작 꽃으로 지정)
그리고 그 외에 시작일이 3월 1일이 아닌 꽃들은
이전꽃의 종료일보다 현재 꽃의 시작일이 작거나 같으면 그 꽃으로 갱신
만약 이전 꽃의 종료일보다 현재 꽃의 종료일이 늦으면 현재 꽃으로 갱신
이런식으로 풀어가려고 했다
그 이유는 예제로 시뮬레이션을 돌린 후 그 과정을 그대로 코드로 구현하고자 했기 때문..
하지만 잘 작동하지 않앗다
<틀린 풀이>
n = int(input())
flower=[]
for i in range(n):
a,b,c,d = map(int,input().split())
start = int(str(a)+str(format(b,'02')))
end = int(str(c)+str(format(d,'02')))
flower.append([start,end])
flower.sort()
print(flower)
count=1
current=flower[0]
for i in flower:
if i[0]<=301:
if current[1]<i[1]:
current=i
print("<301", current)
else:
if current[1]>i[0]:
count+=1
current=i
print("update", current)
if current[1]<i[1]:
current=i
print("update by end", current)
if current[1]>=1130:
break
print(count)
결국 다른 풀이를 참고했는데
접근법은 비슷할지 몰라도 과정은 좀 많이 달랐다
while문을 써서 i를 직접 경우에 따라 증가시키는 방식으로 사용
현재 꽃의 개화 시기 사이에 마지막 꽃의 종료일이 존재한다면
다음 꽃을 탐색하면서 가장 늦게 지는 꽃을 고르고
꽃의 개수가 마지막 꽃의 종료일을 업데이트
만약 종료일이 1130을 초과하면 프로그램 종료
n = int(input())
flower=[list(map(int,input().split())) for _ in range(n)]
flower.sort()
i=0
result=0
last_end = (3,1)
while i<n:
sm,sd,em,ed = flower[i]
if (sm,sd) <= last_end < (em,ed):
max_end = (em,ed)
while i<n-1:
nsm,nsd,nem,ned = flower[i+1]
if last_end<(nsm,nsd):
break
if max_end<(nem,ned):
max_end=(nem,ned)
i+=1
result+=1
last_end=max_end
if(11,30)<last_end:
print(result)
exit(0)
i+=1
print(0)
# 0301 부터 1130까지
'개발자 강화 > 코딩 테스트' 카테고리의 다른 글
[백준] 1915 가장 큰 정사각형 DP / python 골4 (0) | 2024.11.20 |
---|---|
[백준] 1로 2만들기 2 / DP python 실1 (0) | 2024.11.19 |
[백준] 11399 ATM / Greedy python 실4 (0) | 2024.11.18 |
[백준] 1026 보물 Greedy python lv4 (1) | 2024.11.18 |
[백준] 2217 로프 Greedy python 실4 (0) | 2024.11.18 |