본문 바로가기

알고리즘

백준, 사다리 조작(combinations 활용)

728x90

백준, 사다리 조작

combinations 활용 풀이

2023.10.13 - [알고리즘] - 백준, 사다리 조작

백트래킹 말고 조합 라이브러리 활용해서 풀어봤다.

❓ 풀이

사다리가 설치가 안된 모든 위치를 list에 저장

이중 1,2,3개의 조합을 뽑아 사다리를 설치

즉, 사다리를 설치할 수 있는 모든 조합에 사다리를 설치 후, 원하는 값 구할 수 있는지 확인

 

📜 제출 코드

C, M, R = map(int, input().split())

regions = [[False for _ in range(C+1)] for _ in range(R)]

for _ in range(M):
    r, c = map(int, input().split())
    regions[r-1][c] = True

# 사다리 정보를 받고 도착지 return 하는 함수
def result(regions):
    res = []
    for h in range(1,C+1):
        for r in range(R):
            if regions[r][h-1]:
                h -= 1
            elif regions[r][h]:
                h += 1
        res.append(h)
    
    return res

wanted_answer = list(e for e in range(1, C+1))

if result(regions) == wanted_answer:
    print(0)
else:
    r_c_list = []
    for r in range(R):
        for c in range(1, C):

            if not regions[r][c]:
                r_c_list.append((r,c))

    answer = -1

    second_flag = False
    for r in range(1,4):
        if second_flag:
            break

        for comb in combinations(r_c_list, r):
            for u_r, u_c in comb:
                if not regions[u_r][u_c] and not regions[u_r][u_c-1] and not regions[u_r][u_c+1]:
                    regions[u_r][u_c] = True

            if result(regions) == wanted_answer:
                second_flag = True
                answer = r
                break
            else:
                for u_r, u_c in comb:
                    regions[u_r][u_c] = False # 설치했던 사다리 없애기
    print(answer)

 

'알고리즘' 카테고리의 다른 글

프로그래머스, 표현 가능한 이진 트리  (0) 2023.10.25
백준 17406 배열 돌리기 4  (1) 2023.10.23
백준, 사다리 조작  (1) 2023.10.13
프로그래머스, 여행경로  (0) 2023.10.12
백준, 뱀  (0) 2023.10.11