[코드카타] 왼쪽 오른쪽

seonyoung·2024년 8월 20일
0

📁 문제

문자열 리스트 str_list에는 "u", "d", "l", "r" 네 개의 문자열이 여러 개 저장되어 있습니다. str_list에서 "l"과 "r" 중 먼저 나오는 문자열이 "l"이라면 해당 문자열을 기준으로 왼쪽에 있는 문자열들을 순서대로 담은 리스트를, 먼저 나오는 문자열이 "r"이라면 해당 문자열을 기준으로 오른쪽에 있는 문자열들을 순서대로 담은 리스트를 return하도록 solution 함수를 완성해주세요. "l"이나 "r"이 없다면 빈 리스트를 return합니다.

📁 입출력 예

💡 내가 적은 오답

def solution(str_list):
    answer = []
    
    for i in range(len(str_list)):
        if i == "l":
            return str_list[:i]
        elif i == "r":
            return str_list[i+1:]
        else:
            return []

  • 나름 정답일 것 같다는 생각으로 코드 실행을 눌렀지만 테스트 두 개 중 하나를 틀렸다..

💡 내가 적은 정답

def solution(str_list):
    
    for i in range(len(str_list)):
        if str_list[i] == "l":
            return str_list[:i]
        elif str_list[i] == "r":
            return str_list[i+1:]
    else:
        return []
  • 고민하다가 들여쓰기를 잘못했나라는 생각이 들어서 else의 들여쓰기를 바꿔봤더니 정답...!
  • else 구문을 if, elif에 맞추는 것이 아닌 for 루프에 맞춰도 되는지 의문이 들어 찾아봄
    • 파이썬에서 else 블록은 루프가 정상적으로 끝날 때 실행되도록 설계되어 있기 때문에 else 구문은 for 루프와 맞춰서 들여쓰기를 하는 것이 맞음

📌 <else와 for 루프의 관계>

1. else 구문 위치
- else 블록은 for 루프의 블록 내부에 위치해야 하며, for 루프가 반복을 마친 후 실행됨
- 즉, for 루프가 중간에 return 문으로 종료되지 않고 끝까지 실행된 경우에만 else 블록이 실행됨
2. 들여쓰기
- else 블록의 들여쓰기는 for 루프와 같은 수준으로 맞춰야 함
- 즉, for 루프의 내부 블록과 같은 들여쓰기를 사용하여 else 블록이 for 루프와 연결되어 있다는 것을 명확히 해야 함

💡 또 다른 정답

def solution(str_list):
    
    for i in range(len(str_list)):
        if str_list[i] == "l":
            return str_list[:i]
        elif str_list[i] == "r":
            return str_list[i+1:]
    
    return []
  • 이렇게 애초에 else 구문을 작성 안하고 바로 return []를 해도 결과가 나온다는 것을 알게 되어 생각지도 못해 신기해서 가져와 보았음
profile
원하는 바를 이루고 싶은 사람입니다.

0개의 댓글