Algorithm
๊ทธ๋ฆฌ๋/ํฐ ์ ๋ง๋ค๊ธฐ / ์คํ
์ ํธ๋
2024. 12. 28. 23:12
๐ ๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/42883
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๐ ๋ด๊ฐ ์๊ฐํ ํ์ด
# 1. ๋ชจ๋ ์กฐํฉ: len(number) - k ๊ฐ ์ซ์์์ ๋์ฌ ๋ชจ๋ ์กฐํฉ
# 2. sort()๋ก ์ ๋ ฌ
# 3. maxํจ์๋ก ๊ฐ์ฅ ํฐ ์ ์ฐพ๊ธฐ
๐ป ๋ด ์ฝ๋
from itertools import combinations
def solution(number, k):
x = len(number) - k
num_list = list(combinations(number, x))
# print(num_list)
answer = max(''.join(i) for i in num_list)
return answer
์กฐํฉ ์ฌ์ฉํด์ ํ์๋๋ฐ ์๊ฐ์ด๊ณผ๋ก ์คํจ
-> ์คํ์ฌ์ฉํ๊ธฐ
maxํจ์ ์ฌ์ฉํ๋ฉด sort ์ฌ์ฉํ ํ์ ์์
๐ป ๋ต์
def solution(number, k):
stack = [] # ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ์คํ
for num in number:
# ์คํ์ ๋ง์ง๋ง ์ซ์๊ฐ ํ์ฌ ์ซ์๋ณด๋ค ์๊ณ , ์ ๊ฑฐํ ๊ธฐํ(k)๊ฐ ๋จ์ ์๋ค๋ฉด ์ ๊ฑฐ
while stack and k > 0 and stack[-1] < num:
stack.pop()
k -= 1
# ํ์ฌ ์ซ์๋ฅผ ์คํ์ ์ถ๊ฐ
stack.append(num)
# k๊ฐ ๋จ์์๋ค๋ฉด ๋ค์์๋ถํฐ ์ ๊ฑฐ
if k > 0:
stack = stack[:-k]
# ์คํ์ ๋ฌธ์์ด๋ก ๋ณํ
return ''.join(stack)
์ค๋ช
- ๋ฃจํ ๋์:
- ์ซ์๋ฅผ ํ๋์ฉ ์ฒ๋ฆฌํ๋ฉฐ ์คํ์ ๋ฃ์ต๋๋ค.
- ๋ฃ๊ธฐ ์ ์ ์คํ์ ๋ง์ง๋ง ์ซ์์ ๋น๊ตํ์ฌ, ํ์ฌ ์ซ์๊ฐ ๋ ํฌ๋ฉด ์คํ์ ์ซ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ์ ๊ฑฐ๋ k๋ฒ๊น์ง๋ง ๊ฐ๋ฅํฉ๋๋ค.
- k๊ฐ ๋จ์์๋ ๊ฒฝ์ฐ:
- ๋ฃจํ๊ฐ ๋๋ ๋ค์๋ k๊ฐ ๋จ์์๋ค๋ฉด, ์คํ์ ๋ค์์ k๋งํผ ์ซ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ์ต์ข
๊ฒฐ๊ณผ:
- ์คํ์ ๋จ์์๋ ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ํฉ์ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
๋์ ๊ณผ์ ์์
Input: "1924", k = 2
- ์ด๊ธฐ ์ํ: stack = [], k = 2
- ์ฒซ ๋ฒ์งธ ์ซ์ '1': stack = ['1']
- ๋ ๋ฒ์งธ ์ซ์ '9':
- '9' > '1', stack.pop(), k = 1
- stack = ['9']
- ์ธ ๋ฒ์งธ ์ซ์ '2': stack = ['9', '2']
- ๋ค ๋ฒ์งธ ์ซ์ '4':
- '4' > '2', stack.pop(), k = 0
- stack = ['9', '4']
- ๊ฒฐ๊ณผ: '94'
๐ ์ฐธ๊ณ ์๋ฃ
โบ๏ธ ์๋ก ์๊ฒ ๋ ์ง์
์ฅ์
- ์กฐํฉ์ ์ฌ์ฉํ ๋ฐฉ์์ ๋นํจ์จ์ ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ์ง๋ง, ์คํ์ ์ฌ์ฉํ๋ฉด ํ ๋ฒ์ ์ํ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
- O(n) ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฏ๋ก ๋๊ท๋ชจ ์ ๋ ฅ์๋ ํจ์จ์ ์ ๋๋ค.
๐ ๋ฆฌ๋ทฐ
์คํ ๊ตฌํ ์ตํ๊ธฐ