파이썬을 이용한 가장 큰 수 구하기 문제
문제) 주어진 숫자의 자릿수에서 m개의 수를 제거해서 가장 큰 수를 만드는 프로그램을 작성하라.
입력
10진수 n과 제거해야할 자릿수의 개수 m이 주어진다.
풀이
n, m = map(int, input().split())
n = list(map(int, str(n))) #숫자n을 스트링으로 바꿔야 하나씩 접근 가능.
stack=[]
for x in n:
while stack and m>0 and stack[-1]<x: #stack이 비어있지 않고, stack의 마지막 자릿수가 더 작으면 pop
stack.pop()
m -= 1
stack.append(x)
if m!=0:
stack=stack[:-m]
예시)
n = 9977252641, m = 5
맨 앞에서부터 스택에 채워넣는다.
자신의 앞에 있는 숫자가 자신보다 작으면 꺼낸다(pop)
스택: 9 9 7 7 6 4 1
5 -> 앞에 2를 제거
6 -> 앞에 2, 5 제거
3개밖에 제거 못했기 때문에, 뒤에서 2개를 더 제거한다.(내림차순이 되어 있기 때문에.)
stack[:-2]
참고)
[자료구조] 스택, 큐
stack(스택) last in first out 가장 나중에 쌓아진 것이 가장 먼저 나간다. 활용) list에서 pop, append -> stack 자료형 파이썬에서는 list 활용해서 stack을 사용한다. ex) 뒤로가기 버튼, ctrl+z, undo queue(큐) first
study3.tistory.com
출력
#결과출력방법1
res=''.join(map(str,stack))
print(res)
#결과출력방법2
for x in stack:
print(x, end='')
'Python > 알고리즘 문제풀이' 카테고리의 다른 글
[파이썬/알고리즘] 재귀함수를 이용한 이진수 출력 (0) | 2022.11.08 |
---|---|
[알고리즘] 회문 문자열 파이썬, python 회문 문자열 풀이 (0) | 2022.10.26 |