본문 바로가기
Programing/프로그래머스 오답노트

나누어 떨어지는 숫자 배열 ( list() 의 return 안됨 예시 )

by yooom 2023. 9. 11.
문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

 

풀이
def solution(arr, divisor):
    answer = []
    count = 0   
    
    for n in arr:
        if i%divisor == 0 :   
            answer.append(n)   
            count += 1          
            
    if count == 0 :             
        answer.append(-1)       
        
    answer.sort()               
        
    return answer

는 문제없이 실행되지만

def solution(arr, divisor):
    answer = []
    for n in arr:
        if n % divisor == 0:
            answer.append(n)
            
        if len(answer) == 0:
            answer.append(-1)
            
    answer = answer.sort()
    
    return answer

에서는 return 값이 null로 반환된다.

첫 번째 문제는, 두 번쨰 if문의 들여쓰기가 잘못되어 여러차례 list가 비어있는지 점검한다. 오류를 만들어내는 원인은 아니지만 불필요한 과정을 반복한다.

두 번째 문제는, answer = answer.sort() 부분에서 문제가 발생했다. answer.sort()는 내부적으로 정렬하지만 answer = answer.sort()를 사용하면서 새로운 answer이라는 변수를 만들어내는 것 같다.

비슷한 예시로

def solution(arr, divisor):
    answer = []
    for n in arr:
        if n % divisor == 0:
            answer.append(n)
            
    if len(answer) == 0:
        answer.append(-1)
            
    li = answer.sort()
    print(li)          # null
    print(answer)      # [1,2,6,36]
    return answer

라는 코드를 작성했을 때, print( li ) 에서는 null이, print( answer ) 에서는 [1,2,6,36]  등 목표로 하던 리스트가 반환된다.

새로운 변수에 값을 복사할 때 null이 전달되는 이유는 좀 더 공부가 필요할 것 같다.

=========================================================================

sort()는 return값이 없고 sorted()는 리턴값이 있다.

sort()는 내부 정렬을 하고, sorted()는 따로 정렬을 하지 않는다.

=========================================================================

def solution(arr, divisor):
    answer = []
    
    for n in arr:
        if n % divisor==0:
            answer.append(n)
        if len(answer) ==0:
            answer.append(-1)
    
    return list(sorted(answer))

에서는 일부 test set에서 오류가 난다.

 

def solution(arr, divisor):
    answer = []
    
    for n in arr:
        if n % divisor == 0:
            answer.append(n)
    
    if len(answer) == 0:
        answer.append(-1) 
    
    answer.sort() 
    return answer

수정은 이렇게 하는 것이 좋을 것 같다. 

 

 

출처

https://school.programmers.co.kr/learn/courses/30/lessons/12910

 

프로그래머스

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

programmers.co.kr

 

728x90

댓글