처음 코드

def solution(str_list):
    answer = []
    l_idx, r_idx = 0
    l_idx = str_list.index(l)
    r_idx = str_list.index(r)
    
    if "l", "r" not in str_list:
        return []
    elif l_idx > r_idx:
        answer = str_list[:l_idx]
    else:
        answer = str_list[r_idx:]
    return answer

<aside> 💡

음.. 문자열 이 해당 리스트에 들어있는 것을 비교하려면,, and로 논리 연산자를 이용해야 할까? 문제점을 알아보자..

</aside>

🔎 문제점

  1. l_idx, r_idx = 0 이렇게 쓰면 l_idxr_idx같이 0이 들어감 → 의미 없음. 그냥 변수 초기화라면 필요 없어요.
  2. str_list.index(l) → 여기서 l은 변수로 인식돼요. "l"처럼 문자열로 써야 합니다.
  3. "l", "r" not in str_list → 이렇게 쓰면 안 돼요. "l" not in str_list and "r" not in str_list처럼 각각 따로 검사해야 합니다.
  4. elif l_idx > r_idx: → 조건이 뒤집혀 있어요. 문제 설명에 따르면 "l"이 먼저 나오면 왼쪽 부분, "r"이 먼저 나오면 오른쪽 부분을 잘라야 해요.
  5. str_list[r_idx:]"r"을 포함해 잘리는데, 조건은 "r" 기준으로 오른쪽이라 "r"은 제외해야 해요. 즉 str_list[r_idx+1:].

<aside> 💡

아…! 문제의 요지를 정확하게 체크하지 않았다…! 단순히 숫자가 크다고 먼저 오는게 아닌데,, 해당 문자열을 기준으로.. 라고 하면 포함인줄 알았는데,, 말이 기준일뿐,, 포함하지 않는 것 같다!!

변수 초기화는 파이썬 에선 굳이 필요하지 않은 것 같다..! 그럼 어제 배운 next() 를 사용해 볼까?

</aside>

def solution(str_list):
    answer = []
    l_idx = next(str_list.index("l"))
    r_idx = next(str_list.index("r"))
    
    if "l" not in str_list and "r" not in str_list:
        return []
    
    if l_idx < r_idx:
        answer = str_list[:l_idx]
    else:
        answer = str_list[r_idx+1:]
    return answer

image.png

🚨 문제점