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

Gold level4 문제

-정답풀이:

N,K=map(int,input().split())
nums=list(input())

result=[]
k=K
for i in range(N) :
    while k>0 and result and result[-1]<nums[i]:
        result.pop()
        k-=1

    result.append(nums[i])
    
print(''.join(result[:N-K]))

-풀이 공부:

스택으로 풀지 않으면 메모리 초과가 발생한다고 한다. 

주어진 숫자와 result(stack)의 가장 끝 값을 비교해서 result(stack)값이 작으면 result의 끝 원소를 꺼내고 한번 꺼냈으니 k의 값을 하나 감소시킨다. -> 계속 큰 수를 만들어가야해서 그런 것 같다 

result의 끝값이 nums[i]값보다 클 때 while문을 나오고, nums[i]원소를 넣는다

k가 0일 때 for문을 나오므로 이전에 입력받은 N,K값을 이용해서 출력해주면 된다 

 

 

 

이 예제 '5'부분에서 잘못 이해한 것 같다. 

5다음이 2라서 5는 없어지지 않고, 2 뒤에 있는 8 때문에 2가 pop 된다. (7/17)

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

 

10775번: 공항

예제 1 : [2][?][?][1] 형태로 도킹시킬 수 있다. 3번째 비행기는 도킹시킬 수 없다. 예제 2 : [1][2][3][?] 형태로 도킹 시킬 수 있고, 4번째 비행기는 절대 도킹 시킬 수 없어서 이후 추가적인 도킹은 불

www.acmicpc.net

골드 Level2 문제

분리 집합이 아직 잘 이해가 가지 않아 일단 기록만 해둔다 

 

-정답풀이:

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

[그리디/백준] 2839번: 설탕 배달(2차)  (0) 2022.05.30
[백준] 2812번: 크게 만들기  (0) 2022.02.11
[백준] 2810번: 컵홀더  (0) 2022.02.11
[백준] 8980번: 택배(다시)  (0) 2022.02.10
[백준] 11501번: 주식  (0) 2022.02.10

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

 

2810번: 컵홀더

첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다.

www.acmicpc.net

스스로 푼 문제.

예제를 통해서 문자열이 다 S이면 S의 갯수만 구하면된다(한 사람당 컵홀더를 하나씩 쓰면되니까)

근데 이제 커플석이 있을 때 조금 달라진다.

LL은 양쪽의 컵홀더를 모두 사용할 수 있으므로 LL이 있다면 S와 LL의 총 간격수+2를 구해야한다.

처음에 LL을 어떻게 해야하나 고민을 했는데, 그냥 모든 L수를 구해서 2로 나누면 LL의 수였다.

그래서 문자열을 리스트로 받은 다음 하나씩 넘기면서 해당 문자 숫자를 센다.

LL의 갯수로 세야하므로 2로 나눠주고 센다.

간격+2이지만, 총 couple,solo의 갯수+도 가능하므로 14번처럼 출력한다

 

-정답풀이:

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

[백준] 2812번: 크게 만들기  (0) 2022.02.11
[백준] 10775번: 공항(다시)  (0) 2022.02.11
[백준] 8980번: 택배(다시)  (0) 2022.02.10
[백준] 11501번: 주식  (0) 2022.02.10
[백준] 2828번: 사과담기 게임  (0) 2022.02.10

-문제: 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

+ Recent posts