[Python] SW Expert Academy #1210 Ladder1

이재원·2024년 3월 28일

Samsung SW Expert Academy

목록 보기
6/34

📚문제: #1210 Ladder1(D4)

전체 코드

# 1210. Ladder1
 
from copy import deepcopy
 
# 사다리 게임
def ladder(n, graph):
     
    # 가능한 시작 지점에서 모두 시도해본다.
    s = []
     
    # 탐색
    for i in range(100):
         
        if graph[0][i] == 1:
             
            # 시작지점 추가
            s.append([0, i])
     
    # 가능지점에서 시작
    for coord in s:
         
        # 원본 배열 복사
        copied = deepcopy(graph)
         
        # 현재 좌표
        cur_r, cur_c = coord
         
        # 시작지점
        X = cur_c
         
        # 시작 지점 방문처리
        copied[cur_r][cur_c] = 'v'
         
        # 사다리 게임이 끝날 때 까지 계속 반복
        while True:
              
            # 범위를 벗어나지 않고, 오른쪽으로 이동할 수 있을 때
            if 0 <= cur_c + 1 <= 99 and copied[cur_r][cur_c+1] == 1:
           
                while True:
 
                    # 이동
                    cur_c = cur_c + 1
 
                    # 범위를 벗어나지 않을 때
                    if 0 <= cur_c <= 99:
                         
                        # 1이면 계속 이동
                        if copied[cur_r][cur_c] == 1:
                             
                            # 방문처리
                            copied[cur_r][cur_c] = 'v'
                            continue
                         
                        # 0이면 중단
                        elif copied[cur_r][cur_c] == 0:
                             
                            cur_c -= 1
                            break
                     
                    # 범위를 벗어날 때
                    else:
                         
                        cur_c -= 1
                        break
                     
            # 범위를 벗어나지 않고, 왼쪽으로 이동할 수 있을 때
            if 0 <= cur_c - 1 <= 99 and copied[cur_r][cur_c-1] == 1:
                 
                while True:
 
                    # 이동
                    cur_c = cur_c - 1
 
                    # 범위를 벗어나지 않을 때
                    if 0 <= cur_c <= 99:
                         
                        # 1이면 계속 이동
                        if copied[cur_r][cur_c] == 1:
                             
                            # 방문처리
                            copied[cur_r][cur_c] = 'v'
                            continue
                         
                        # 0이면 중단
                        elif copied[cur_r][cur_c] == 0:
                             
                            cur_c += 1
                            break
                     
                    # 범위를 벗어날 때
                    else:
                         
                        cur_c += 1
                        break
                 
            # 아래로 이동
            cur_r += 1
             
            # 범위 안쪽이면
            if 0 <= cur_r <= 99:
                 
                if copied[cur_r][cur_c] == 1:
                     
                    # 방문처리
                    copied[cur_r][cur_c] = 'v'
                    continue
                 
                # 답 출력 및 함수 종료
                elif copied[cur_r][cur_c] == 2:
                     
                    print("#{} {}".format(n, X))
                    return
             
            # 마지막 지점 도착, 
            else:
                 
                break
 
# 10개의 테스트 케이스가 주어진다.
for t in range(1, 10+1):
     
    # 테스트 케이스의 번호가 주어진다.
    num = int(input())
     
    # 2차원 배열
    grid = []
     
    # 100 x 100 크기 2차원 배열
    for _ in range(100):
         
        grid.append(list(map(int, input().split())))
         
    # 함수 실행
    ladder(t, grid)

0개의 댓글