SWEA 1210 사다리타기

홍찬우·2022년 12월 25일
0

문제

Ladder1

사다리를 타며 2로 도착하는 1의 인덱스를 찾아내자


풀이

1. 가장 마지막 행에 있는 2의 위치를 찾는다.
2. 1을 타고 거꾸로 올라가며 첫 째 행에서 1을 만나면 종료하고 열의 위치를 출력한다.


코드

start_i = len(a)-1  # 맨 마지막 행
start_j = a[-1].index('2')  # 맨 마지막 행의 2의 열 위치

def check(i, j):  # return 값이 0이면 왼쪽에 1이 존재, 1이면 오른쪽에 1이 존재
    if j == 0 :  # j가 맨 왼쪽에 존재하는 경우 j-1을 하게 될 때 IndexError 방지를 위한 조건
        if a[i][j+1] == '1':
            return 1
    
    elif j == len(a) - 1:  # j가 맨 오른쪽에 존재하는 경우 j+1을 하게 될 때 IndexError 방지를 위한 조건
        if a[i][j-1] == '1':
            return 0
    
    else:
        if a[i][j-1] == '1':
            return 0
        elif a[i][j+1] == '1':
            return 1
    
def go_left(i, j):  # 무한 루프를 돌며 왼쪽으로 1이 계속 존재하면 이동한다. 0을 만나면 반복문 탈출 및 현재 j값 리턴
    while True:
        if j == 0:
            break
        if a[i][j-1] == '0':
            break
        j -= 1
    return j

def go_right(i, j):  # go_left와 동일하게 오른쪽으로 이동
    while True:
        if j == len(a) - 1:
            break
        if a[i][j+1] == '0':
            break
        j += 1
    return j

while True:  # check return이 0이면 왼쪽으로 이동하며 j update, 1이면 오른쪽으로 이동하며 update 
    if check(start_i, start_j) == 0:
        start_j = go_left(start_i, start_j)   
        
    elif check(start_i, start_j) == 1:
        start_j = go_right(start_i, start_j)
            
    start_i = start_i - 1  # 왼쪽 혹은 오른쪽으로의 이동이 종료되면 위로 이동
    
    if start_i == 0:
        print(start_j)
        break
        

결과

생애 첫 알고리즘 문제 풀이였는데, input을 받는 법도 몰라 직접 txt 파일을 읽어 문제를 풀었다.
그래서 테스트 케이스 10개는 맞췄지만 제출을 못해서 시간/메모리 초과 여부도 모른다..
앞으로 더욱 열심히 하는 것 밖에는 답이 없다고 절실히 느끼게 됐다.

profile
AI-Kid

1개의 댓글

comment-user-thumbnail
2022년 12월 25일

(주)같이의가치(구 백찬영) 임직원 일동은 홍찬우 학생의 무궁한 발전을 응원합니다 ^&^

답글 달기