코딩테스트/SWEA

[Python, 파이썬] SWEA 1210. [S/W 문제해결 기본] 2일차 - Ladder1

알코딩 2024. 11. 10. 13:20

100 x 100 크기의 2차원 배열로 주어진 사다리에 대해서, 지정된 도착점에 대응되는 출발점 X를 구하는 문제!

 

def find(): # 결승점 index 찾기
    for i in range(100):

        if(maps[99][i]==2):
            return (i)
    
T = 10 # 테스트케이스의 개수 T

for test_case in range(1, T+1):

    test_case = int(input()) # 테스트케이스 번호
    maps = [] # 맵을 저장할 리스트

    # 맵 입력받기
    for _ in range(100):
        maps.append(list(map(int, input().split())))

    # 시작점 찾기
    j = find()

    for i in range(99, -1, -1):
        
        if(j > 0 and maps[i][j-1]): # 사다리가 있을 시
            while(j > 0 and maps[i][j-1]):
                j -= 1
            continue

        if(j < 99 and maps[i][j+1]): # 사다리가 있을 시
            while(j < 99 and maps[i][j+1]):
                j += 1
            continue

    print("#%d %d" % (test_case, j))
 

 

 

 

[문제풀이]


 

도착지에서 위로 타고 올라가면서 사다리 발견시 이동하면 되는 간단한 문제.

 

우선 정답의 위치 (99, ?)를 찾는다.

그 후 역으로 위로 올라가면서 사다리를 발견시 이동하면 된다.

if(j > 0 and maps[i][j-1]): # 사다리가 있을 시
      while(j > 0 and maps[i][j-1]):
           j -= 1
      continue

if(j < 99 and maps[i][j+1]): # 사다리가 있을 시
      while(j < 99 and maps[i][j+1]):
           j += 1
      continue
 

j-1, j+1 이렇게 양 옆 검사해서 사다리를 발견했다?

그럼 0 나오기 전까지 계속 이동한다.

 

그래서 이렇게 위로 이동하며 사다리 타다가 첫번째 행에 도착시 그때의 j 좌표가 답이다.