개인 공부/TIL

[ TIL - PGS ] 99클럽 코테 스터디 37일차 TIL + 오늘의 학습 가이드

킴도비 2024. 8. 27. 14:41

💡 오늘의 학습 키워드

  • 완전 탐색

 

✅ 오늘 공부한 내용

 

👀 오늘의 회고

🔥 어떤 시도를 했는가?

  • 오늘의 코드 풀이
import java.util.*;

public class Main {
    static int k;
    static String[] signs;
    static boolean[] used = new boolean[10];
    static ArrayList<String> results = new ArrayList<>();

    // 부등호 관계를 만족하는지 확인하는 함수
    static boolean check(char a, char b, char sign) {
        if (sign == '<') return a < b;
        if (sign == '>') return a > b;
        return false;
    }

    // 백트래킹으로 가능한 모든 경우의 수 찾기
    static void dfs(int depth, String num) {
        if (depth == k + 1) {
            results.add(num);
            return;
        }

        for (int i = 0; i <= 9; i++) {
            if (!used[i]) {
                if (depth == 0 || check(num.charAt(depth - 1), (char)(i + '0'), signs[depth - 1].charAt(0))) {
                    used[i] = true;
                    dfs(depth + 1, num + i);
                    used[i] = false;
                }
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 입력 받기
        k = sc.nextInt();
        signs = new String[k];
        for (int i = 0; i < k; i++) {
            signs[i] = sc.next();
        }

        // DFS를 이용한 백트래킹 수행
        dfs(0, "");

        // 가능한 정수 중 가장 큰 값과 작은 값 찾기
        Collections.sort(results);
        System.out.println(results.get(results.size() - 1));  // 최댓값
        System.out.println(results.get(0));  // 최솟값
    }
}

 

👩‍💻 내일은 무엇을 학습할 것인가?

  • 항해 99 문제 풀기
  • 원티드 팀플 진행하기
  • 책 읽고 정리하기