본문 바로가기

파이썬과 함께 알면 유용한 자료구조 이용 방법 일지

문자열 관리 팁 - 1. 배열안에 값을 제거하면서 탐색하는 과정에서의 인덱스 에러의 슬기로운 처리 방법

728x90

(단순 처리 방법) - 인데스 초과 확률 多

    for i, ticket in enumerate(tickets):
        # 마지막 방문 공항(answer[-1])과 이번 티켓의 출발 공항(ticket[0])이 같으면
        # print(i, ticket)
        start, desc = ticket[0], ticket[1]
        if start == answer[-1]:
        
            # 이렇게 해당 ticket 배열이 필요가 없다고 판단 되고
            # 만약 또 값은 값을 순회하게 되면 문제를 해결하는데
            # 방해가 되기 때문에 삭제를 할 경우 
            # 위 방법으로 직접적으로 삭제를 하고 순회하는 식으로 문제를 풀면 인덱스 에러가 나기 쉽다.
            # 만약 해당 인데스의 재방문를 피하고 싶다면 재귀를 이용해보자
            del tickets[i]  
            # 기타하 내가 할 작업 ..등

 

(재귀 이용 방법)

def dfs(tickets, answer):
    global candidates
    for i, ticket in enumerate(tickets):
        start, desc = ticket[0], ticket[1]
        if start == answer[-1]:
            # 재귀를 이용하여 굳이 ticket의 한 인덱스의 값을 직접적으로 삭제하지 않고
            # 이런식으로 재귀를 이용하여 처리하면 인덱스 초과 오류에서 해방될 수 있다.
            dfs(tickets[:i] + tickets[i + 1:], answer + [desc])

인덱스 초과 오류는 복잡한 문제일수록

알기가 쉽지 않다

정 안되면 이런 식으로 해보는 것도 나쁘지 않을지도?

무엇보다 원래의 메모리값을 직접적으로 관여해서 문제를 풀면 

대부분 좋지 않다.

이러한 방법은 직접 관여를 피해서 문제를 푸는 여러 방법 중 하나이다.

728x90