Skip to content

Commit 0626f8e

Browse files
committed
Add: Greedy boj 2812
1 parent 41d0146 commit 0626f8e

2 files changed

Lines changed: 40 additions & 2 deletions

File tree

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,9 @@
121121

122122
| 사이트 | 카테고리 | 문제 풀이 | 난이도 | 업데이트 날짜 |
123123
| :------------------------------------------: | :-----------: | :-------------------------------: | :----: | :-----------: |
124-
| [백준](https://www.acmicpc.net/problem/7453) | DFS & BFS | [2146](boj/dfs_bfs/2146.py) | 골드3 | 22.03.01 |
125-
| [백준](https://www.acmicpc.net/problem/7453) | Binary Search | [1561](boj/binary_search/1561.py) | 골드2 | 22.03.02 |
124+
| [백준](https://www.acmicpc.net/problem/2146) | DFS & BFS | [2146](boj/dfs_bfs/2146.py) | 골드3 | 22.03.01 |
125+
| [백준](https://www.acmicpc.net/problem/1561) | Binary Search | [1561](boj/binary_search/1561.py) | 골드2 | 22.03.02 |
126+
| [백준](https://www.acmicpc.net/problem/2812) | Greedy | [2812](boj/greedy/2812.py) | 골드4 | 22.03.05 |
126127

127128
> \*표시한 것은 힌트를 얻거나 해설을 참고했으므로 다시 풀어봐야함
128129

boj/greedy/2812.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
'''
2+
풀이
3+
이전에 프로그래머스에서 풀었던 큰 수 만들기랑 비슷한 문제인 줄 알았는데... 같은 문제였다 ㅎㅎ?
4+
5+
풀이 방법은 간단하다.
6+
주어진 수를 한 자리씩 순회하며 현재 숫자와 스택에 있는 수들을 비교한다.
7+
스택에 있는 수가 현재 숫자보다 작다면 스택에 있는 수를 하나씩 제거하고 제거 카운트를 1씩 감소시킨다.
8+
스택이 비어있거나 스택에 있는 수들이 현재 숫자보다 크거나 제거 카운트가 0이면 스택에 현재 숫자를 추가한다.
9+
10+
주어진 수를 모두 순회하고나면 현재 스택에 남은 숫자들을 조합하여 출력하면 된다.
11+
여기서, 주의할 점은 순회가 끝난 후에도 제거 카운트가 0이 아닌 경우 스택의 뒤부터 제거 카운트만큼 제거하고 조합해야 한다.
12+
예를 들어 주어진 숫자가 7654처럼 내림차순으로 주어진다면
13+
k가 2라고 가정해도 순회가 끝난 후 스택에는 7, 6, 5, 4가 그대로 남아있기 때문이다!
14+
'''
15+
16+
import sys
17+
input = lambda: sys.stdin.readline().strip()
18+
19+
def solution(n, k, number):
20+
cnt = k
21+
st = []
22+
for i in number:
23+
if not st:
24+
st.append(i)
25+
continue
26+
27+
while cnt and st and st[-1] < i:
28+
st.pop()
29+
cnt -= 1
30+
st.append(i)
31+
32+
print(''.join(st[:len(st) - cnt]))
33+
34+
if __name__ == "__main__":
35+
n, k = map(int, input().split())
36+
number = input()
37+
solution(n, k, number)

0 commit comments

Comments
 (0)