-문제: https://www.acmicpc.net/problem/8980

어려운 문제. 아직 풀이 이해가 안가서 나중에 다시 봐야할 것 같다

 

-정답풀이:

n,c=map(int,input().split())
m=int(input())
nums=[]
temps=[c]*n

for _ in range(m):
    nums.append(list(map(int,input().split())))
    
nums=sorted(nums,key=lambda x: x[1]) #도착하는 순서대로 정렬

ans=0
for i in range(len(nums)):
    minNum=c+1
    for j in range(nums[i][0],nums[i][1]): 
        if temps[j]<minNum : 
            minNum=temps[j]
    t=min(minNum,nums[i][2]) 
    ans+=t
    for j in range(nums[i][0],nums[i][1]):
        temps[j]-=t
print(ans)

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

[백준] 10775번: 공항(다시)  (0) 2022.02.11
[백준] 2810번: 컵홀더  (0) 2022.02.11
[백준] 11501번: 주식  (0) 2022.02.10
[백준] 2828번: 사과담기 게임  (0) 2022.02.10
[백준] 2012번: 등수 매기기  (0) 2022.02.09

-문제: https://www.acmicpc.net/problem/11501

 

11501번: 주식

입력의 첫 줄에는 테스트케이스 수를 나타내는 자연수 T가 주어진다. 각 테스트케이스 별로 첫 줄에는 날의 수를 나타내는 자연수 N(2 ≤ N ≤ 1,000,000)이 주어지고, 둘째 줄에는 날 별 주가를 나타

www.acmicpc.net

 

-틀린 풀이:

리스트에서 최댓값을 구한 후 인덱스를 진행하다가 인덱스와 인덱스 값이 모두 크면 최댓값-인덱스값을 저장하는 식으로 진행했더니 시간초과가 발생했다. 

매 반복마다 최댓값을 구하려고한 이유는 예제3번에서처럼 가격 3 이후로 최댓값은 2이므로, 그것을 기준으로 계산해야 답이 4가 아닌 5가 나왔기 때문이다. 여기서 시간초과가 발생한 것 같다(매번 리스트에서 최댓값을 조회하는 것 때문)

 

-정답풀이:

이전에 풀었던 문제들과 비슷하게 리스트 끝 값을 기준으로 진행하면 성공한다

왼쪽부터 시작했을 때 증가폭이 오르락 내리락하면 리스트 오른쪽부터 진행해보는 걸 시도해보자

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

[백준] 2810번: 컵홀더  (0) 2022.02.11
[백준] 8980번: 택배(다시)  (0) 2022.02.10
[백준] 2828번: 사과담기 게임  (0) 2022.02.10
[백준] 2012번: 등수 매기기  (0) 2022.02.09
[백준] 13904번: 과제(다시)  (0) 2022.02.09

-문제: https://www.acmicpc.net/problem/2828

-정답풀이:

주어진 위치(p)에 따라서 움직이는데

if p>end:(이전 위치보다 오른쪽에 있을때)

p가 이전 바구니 end보다 먼 곳에 있다면 끝 부분을 오른쪽 끝으로 한뒤 왼쪽으로 바구니를 놓으면 된다 (주어진 값이 스크린 끝일 경우 이걸 쓰는 것 같다)

 

elif p<start:(이전 위치보다 왼쪽에 있을때)

p가 이 전 바구니 start보다 왼쪽에 있을 때인데(p start 순서로) 그럼 start를 p로 끌어오면 되므로 move+= start-p가 된다

start,end는 현재 위치(p)와 바구니 크기를 고려해서 입력하면된다 

n,m=map(int,input().split())
j=int(input())
start=1
end=m
move=0
for _ in range(j):
    p=int(input())
    
    if p< start:
        move+=start-p
        start=p
        end=start+m-1
    elif p>end:
        move+=p-end
        end=p
        start=end-m+1
print(move)

-틀린풀이: 

else문을 보면 정답풀이의 elif문과 똑같은데 if문 구현하는데 있어서 틀린 것 같다

if문을 이렇게 작성한 이유가 바구니는 스크린을 넘어가면 안되므로 주어진 값이 n과 동일하거나, 주어진 값에서 바구니를 놓았을 때 스크린을 넘는 경우에는 끝을 n에 맞추고 바구니 크기만큼 왼쪽에 넣는거라고 생각했는데 이부분이 틀린 것 같다

 

그리고 굳이 주어진 값들 리스트로 만들어서 진행 안하고, 값 받아서 바로 move값 구해서 더하면 된다

 

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

[백준] 8980번: 택배(다시)  (0) 2022.02.10
[백준] 11501번: 주식  (0) 2022.02.10
[백준] 2012번: 등수 매기기  (0) 2022.02.09
[백준] 13904번: 과제(다시)  (0) 2022.02.09
[백준] 9576번: 책 나눠주기  (0) 2022.02.09

-문제: https://www.acmicpc.net/problem/2012

엄청 쉬운 문제인데 다른 방법으로 생각해서 시간 오래걸린 문제.

너무 복잡하게 생각했나 간단한 방법이 답일 거라고 생각하지 못했다 그래서 개빡침

원리는 예상 등수를 오름차순 정렬해서 각각의 인덱스 차이값을 더해주면 된다 

 

7월 15일: 이전에 풀었을 때 아쉬웠던거 해결!!(단순하게 생각해서 금방 풂)

-정답풀이: 

n=int(input())
expect=[]
for _ in range(n):
    expect.append(int(input()))
expect.sort()
ans=0
for i in range(1,n+1):
    ans+=abs(i-expect[i-1])
print(ans)

-틀린풀이:

인덱스와 등수 같게 하고, actual에 넣는다. 

actual에 들어가지 못한 등수 들은 작은 것부터 0값인 인덱스에 넣어준다 

45%까지 진행되다가 계속 IndexError가 발생해서 이걸로 푸는 건 포기했다 

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

[백준] 11501번: 주식  (0) 2022.02.10
[백준] 2828번: 사과담기 게임  (0) 2022.02.10
[백준] 13904번: 과제(다시)  (0) 2022.02.09
[백준] 9576번: 책 나눠주기  (0) 2022.02.09
[백준] 9237번: 이장님 초대  (0) 2022.02.09

+ Recent posts