시작이 반

[백준] 16719번 (python 파이썬) 본문

알고리즘/백준

[백준] 16719번 (python 파이썬)

G_Gi 2021. 4. 7. 01:41
SMALL

https://www.acmicpc.net/problem/16719

 

구현문제이다..

 

stack을 사용하여 풀었다.

stack에는 사전순으로 앞에 오는 문자의 인덱스를 넣으면서 인덱스tps://www.acmicpc.net/problem/16719

 

 

구현문제이다..

 

 

 

stack을 사용하여 풀었다.

 

stack에는 사전순으로 앞에 오는 문자의 인덱스를 넣으면서 인덱스 계산을 해줬다.

 

 

 

 

이런식으로 풀었는데 너무 어렵게 푼거같다..

 

string = list(input())
index = list()
visited = [False] * len(string)
s = 0
e = len(string)

while True:
    check = False
    if string[s:e]:
        min_str = min(string[s:e])
        min_idx = string[s:e].index(min_str) + s
        visited[min_idx] = True
        check = True
        index.append(min_idx)
        s = min_idx + 1
    else:
        if index:
            e = index.pop()
        if index:
            s = index.pop()
            index.append(s)
            s += 1
        else:
            s = 0
    if check:
        for i in range(len(visited)):
            if visited[i]:
                print(string[i], end='')
        print()

    if all(visited):
        break

 

다시풀어보기...

 

 

재귀로 다시풀었다.

string = list(input())
visited = [False] * len(string)


def solve(left, right):
    if left == right:
        return

    min_str = min(string[left: right])
    min_idx = string[left: right].index(min_str) + left

    visited[min_idx] = True

    for i in range(len(string)):
        if visited[i]:
            print(string[i], end='')
    print()

    solve(min_idx + 1, right)
    solve(left, min_idx)


solve(0, len(string))
LIST