코딩테스트/BOJ

[백준][구현][분할정복][DFS] 16719. JOAC

박소민 2023. 8. 12. 19:29
16719. JOAC
 

16719번: ZOAC

2018년 12월, 처음 시작하게 된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 앞 글자부터 하나씩 보여주는 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로

www.acmicpc.net

 

  • 다른 사람 풀이

사전순으로 가장 작은 값이 앞에 나오게 

가장 작은 값의 오른쪽 값들을 똑같이 사전순으로 출력한 후

왼쪽을 사전순으로 점점 더해가면서 출력

-> 오른쪽 먼저 깊게 다 돌고 왼쪽 돌기 

-> DFS

# 가장 작은 것 기준 오른쪽 먼저 완성
# 그 이후 왼쪽 완성
# dfs

lst = list(input().rstrip())
result = ["" for _ in range(len(lst))]


def solution(start, lst):
    if not lst:  # 빈 리스트
        return

    # 남은 리스트에서 가장 작은 값 찾기
    min_val = min(lst)
    temp = lst.index(min_val)

    result[start + temp] = min_val
    print("".join(result))

    # 오른쪽 먼저 재귀 -> 가장 최소인 값의 오른쪽부터 다 출력
    solution(start+temp+1, lst[temp+1:])
    # 오른쪽이 완성된 상태로 왼쪽 출력
    solution(start, lst[:temp])


solution(0, lst)