본문 바로가기
프로그래밍/알고리즘

'if-if-else'가 아니라 'if-elif-else'를 사용해야 하는 이유

by 숙님 2023. 4. 25.
728x90

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

틀린 코드 

만약에 이 문제에서 답을 아래와 같이 적으면 틀린다 

def solution(arr):
    answer = []
    for i in arr:
    	#첫번째 if문 
        if i >= 50 and i%2 == 0:
            answer.append(i//2)
        #두번째 if문
        if i < 50 and i%2 != 0:
            answer.append(i*2)
        else:
            answer.append(i)
    return answer

 

이유는 코드의 중복이다 

입출력 예시와 같이 '[1,2,3,100,99,98]'로 arr이 주어진다면 

1 -> 첫번째 if문 조건 거짓 -> 두번째 if문 해당 -> 2를 출력(곱하기 2를 해서) 

2 -> 첫번째 if문 조건 거짓  -> 두번째 if문  거짓  -> else를 통해 2를 출력 

3 -> 첫번째 if문 조건 거짓  -> 두번째 if문  해당 -> 6을 출력(곱하기 2를 해서)  

100 -> 첫번째 if문 조건 해당, 50을 출력(나누기 2를 해서) -> 두번째 if문 거짓 -> else를 통해 100을 출력  

99 -> 첫번째 if문 조건 거짓 -> 두번째 if문 거짓 -> else를 통해 99를 출력 

98 -> 첫번째 if문 조건 해당, 49을 출력(나누기 2를 해서) -> 두번째 if문 거짓 -> else를 통해 98을 출력  

 

정리하면 첫번째 조건문 해당, 두번째 조건문 거짓인 원소들은 else를 통해 코드의 중복이 일어난다 

즉, [2,2,6,50,100,99,49,98]이 되어서 코드가 통과하지 못한다 

 

맞는 코드 

'if-elif-else'로 바꾸면 맞는다 

def solution(arr):
    answer = []
    for i in arr:
        if i >= 50 and i%2 == 0:
            answer.append(i//2)
        elif i < 50 and i%2 != 0:
            answer.append(i*2)
        else:
            answer.append(i)
    return answer

의도한 것처럼 [2,2,6,50,99,49]가 나온다 

댓글