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>
l_idx, r_idx = 0
이렇게 쓰면 l_idx
와 r_idx
에 같이 0이 들어감 → 의미 없음. 그냥 변수 초기화라면 필요 없어요.str_list.index(l)
→ 여기서 l
은 변수로 인식돼요. "l"
처럼 문자열로 써야 합니다."l", "r" not in str_list
→ 이렇게 쓰면 안 돼요.
"l" not in str_list and "r" not in str_list
처럼 각각 따로 검사해야 합니다.elif l_idx > r_idx:
→ 조건이 뒤집혀 있어요. 문제 설명에 따르면 "l"
이 먼저 나오면 왼쪽 부분, "r"
이 먼저 나오면 오른쪽 부분을 잘라야 해요.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