ABOUT ME

Today
Yesterday
Total
  • 2529. [Python]부등호
    Python_알고리즘/Silver I 2025. 2. 6. 05:37

    1. 문제

     

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

     

    2. 접근 방법

     

    • 시간 제한: 1초
    • 메모리 제한: 256MB
    • 백트래킹
    • 브루트포스

     

    3. 파이썬 코드

     

    # 백트래킹
    def backtracking(index, check):
        # 인덱스가 끝값에 도달할 경우
        if index == K + 1:
            answer.append("".join(map(str, check)))
            return
        # 0 ~ 9 까지 값 반복하며 방문헀는지 안했는지 및 부등호에 따른 연산자 처리
        for num in range(10):
            if not visited[num]:
                if index == 0 or (operator[index - 1] == "<" and check[-1] < num) or (operator[index - 1] == ">" and check[-1] > num):
                    visited[num] = True
                    backtracking(index + 1, check + [num])
                    visited[num] = False
    
    
    K = int(input())
    operator = input().split()
    
    visited = [False] * 10
    answer = []
    # 방문처리 및 리스트 정리
    for num in range(10):
        visited[num] = True
        backtracking(1, [num])
        visited[num] = False
    
    print(answer[-1])
    print(answer[0])

     

    4. 문제를 풀고난 후 생각

     

    • K 값이 2 ~ 9 이므로 백트래킹 + 브루트 포스로 모든 경우의 수를 돌아가며 가능한 부등호 경우의 수를 모두 저장한다.
    • 0부터 시작했기 때문에 0 번인덱스가 최소값 -1 인덱스가 끝값이 되므로 백트래킹 구현만 제대로해주면 쉽게 풀 수 있다.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 브루트 포스
    • 백트래킹

    'Python_알고리즘 > Silver I' 카테고리의 다른 글

    14562. [Python]태권왕  (0) 2025.01.02
    14888. [Python]연산자 끼워넣기  (0) 2024.07.31
    20922. [Python]겹치는 건 싫어  (0) 2024.07.15
    2531. [Python]회전 초밥  (0) 2024.06.30
    1105. [Python]팔  (0) 2024.06.20

    댓글

Designed by Tistory.