SSAFY/SWEA

[SWEA] #1211. Ladder2_파이썬

728x90
반응형

풀기 전 생각해보기😮


풀이🛫

T = 10

for t in range(T):
    testcase = int(input())
    arr = [list(map(int, input().split())) for i in range(100)]

    # 출발 가능한 인덱스를 구함    
    startList = []
    for i in range(100):
        if arr[0][i] == 1:
            startList.append(i)
    
    def cntRoute(startRow):
        col, row = 0, startRow
        cntSide = 0 

        while col != 99:
            # 왼쪽에 길이 있을 때
            if 0<=row-1 and arr[col][row-1] == 1:
                while 0<=row-1 and arr[col][row-1] == 1:
                    row -= 1
                    cntSide += 1
            
            # 오른쪽에 길이 있을 때
            elif 100>row+1 and arr[col][row+1] == 1:
                while 100>row+1 and arr[col][row+1] == 1:
                    row += 1
                    cntSide += 1
            
            # 왼쪽, 오른쪽에 길이 없을 때 아래로 진행
            col += 1

        return cntSide

    # 추가 이동한 만큼의 양을 담는 리스트 생성
    cntSideList = []
    for i in startList:
        cntSideList.append(cntRoute(i))
    
    # cntSideList에서 가장 작은 값을 갖는 인덱스의 시작점 출력
    answer = startList[cntSideList.index(min(cntSideList))]
    print(f"#{testcase}", answer)

 

핵심 정리🎁

  • Ladder1 문제를 풀었다면, 쉽게 풀 수 있었던 문제다
  • 시작점의 이동 경로(움직인 횟수)를 모두 가지고 비교할 필요는 없을 것 같다. 시작점에서 도착점까지 내려오는 열의 개수는 동일하기 때문이다
  • 이동경로를 구하는 반복되는 과정에 혼동하지 않도록 함수를 이용했다

 

링크💎

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

후기 😎

  • 자신감 충전!

 

 

 

'SSAFY > SWEA' 카테고리의 다른 글

[SWEA] 1959. 두 개의 숫자열  (0) 2022.08.15
[SWEA] #4831. 전기버스_파이썬  (0) 2022.08.12
[SWEA] #1210. Ladder1_파이썬  (0) 2022.08.11
[SWEA] 1954. 달팽이 숫자_파이썬  (0) 2022.08.09
[SWEA] #11014. 농작물 수확_파이썬  (0) 2022.08.04