본문 바로가기
ALGORITHM/SW Expert Academy

[SWEA/Python] 1210. Ladder1

by 안녕나는현서 2021. 8. 13.
728x90

📌 문제

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

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

swexpertacademy.com

 

📌 문제 접근 방법

- 맞이한 문제들👿

  1. 현재 칸에서 왼쪽이 1이면 왼쪽으로 이동을 하는데
    • 이동 후에도 왼쪽으로 또 이동해야 하는데, 오른쪽에도 1이 있음!!!!
    • -> 재귀함수로 계속 왼쪽으로만 갈 수 있도록 구현 (오른쪽도 마찬가지)
  2. j가 0이거나 99일 때 생기는 IndexError
    • 이것도 함수를 따로 구현해서 처리해주니 그나마 깔끔,,

 

later) 칸을 중심으로 이동하는 게 아니라, 세로축을 기준으로 이동하면 가로방향을 한 방에 이동할 수 있다!

 

📌 코드

import sys

sys.stdin = open('input.txt')

def mv_left(i, j):
    # j가 0일 경우 좌표 그대로 리턴
    if j == 0:
        return i, j
    # j가 0이 아닐 경우 왼쪽이 1이 아닐 때까지 왼쪽으로 이동
    elif ladder[i][j-1]:
        return mv_left(i, j-1)
    # 더이상 왼쪽이 1이 아닐 경우 좌표 리턴
    else:
        return i, j

def mv_right(i, j):
    if j == 99:
        return i, j
    elif ladder[i][j+1]:
        return mv_right(i, j+1)
    else:
        return i, j


for _ in range(10):
    t = int(input())

    ladder = []
    for _ in range(100):
        ladder.append(list(map(int, input().split())))

    # 도착점의 좌표 구하기 ladder[i][j]
    i = 99
    j = 0
    while True:
        if ladder[i][j] == 2:
            break
        else:
            j += 1

    while i:
        i -= 1

        if j == 0:
            i, j = mv_right(i, j)
            continue
        elif j == 99:
            i, j = mv_left(i, j)
            continue
        elif ladder[i][j-1]:
            i, j = mv_left(i, j)
        elif ladder[i][j+1]:
            i, j = mv_right(i, j)

    print('#{} {}'.format(t, j))
728x90

댓글