Algorithm/baekjoon

ZOAC

마닐라 2022. 6. 13. 14:47

📍 문제 설명

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

 

16719번: ZOAC

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

www.acmicpc.net

 

💡 접근

처음에는 n개중에 1~n개 뽑는 조합으로 풀고 뽑힌 조합에서 걸러내려 했다.

근데 모든 경우를 뽑다보니 시간 초과가 났다.

이미 뽑은 문자들을 방문처리 하면서 출력하고 뽑는 문자들에 대해서 왼쪽 오른쪽 탐색을 해주면 불필요한 탐색을 안해도 된다.

 

👩‍💻 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    static char[] ch;
    static boolean[] visited;
    static StringBuilder sb;

    public void zoac(int left, int right) {
        if(left > right) return;
        int idx = left;

        // left와 right 사이에 있는 글자중 사전식 순서가 가장 낮은 글자를 찾는다.(idx)
        for (int i = left; i <= right; i++) {
            if (ch[idx] > ch[i]) {
                idx = i;
            }
        }
        visited[idx] = true;
        for (int i = 0; i < ch.length; i++) {
            if (visited[i]) {
                sb.append(ch[i]);
            }
        }
        sb.append("\n");

        zoac(idx + 1, right);
        zoac(left, idx  - 1);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Main t = new Main();

        String str = br.readLine();
        ch = str.toCharArray();
        visited = new boolean[ch.length];
        sb = new StringBuilder();
        t.zoac(0, ch.length-1);
        System.out.println(sb);
    }

}

'Algorithm > baekjoon' 카테고리의 다른 글

회문  (0) 2022.07.23
이중 우선순위 큐  (0) 2022.07.21
순열 정렬  (0) 2022.06.10
홀수 홀릭 호석  (0) 2022.06.04
ZOAC 3  (0) 2022.05.07