관리 메뉴

오늘도 배운다

나누어 떨어지는 숫자 배열 / 프로그래머스, 파이썬 코딩테스트 연습 연습문제 본문

코딩테스트연습(파이썬)

나누어 떨어지는 숫자 배열 / 프로그래머스, 파이썬 코딩테스트 연습 연습문제

LearnerToRunner 2022. 11. 30. 23:03

문제

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

 

 

제출답안

def solution(arr, divisor):
    ls_sorted = sorted([element for element in arr if element- divisor*(element//divisor) == 0])

    answer = ls_sorted if ls_sorted != [] else [-1]
    return answer

 

 

제출 후 개선답안

1. 나눌 수 있는지 여부는 %를 사용하여 간소화
2. or을 사용해서 리스트가 비었을 때 리턴할 값을 지정할 수 있음 (다른 사람 풀이 참고)


>> 결론 속도가 대체로 줄어든 경향. 다만 테스트 6의 경우 더 늘어났다. 왜일까??
def solution(arr, divisor):
    answer = sorted([element for element in arr if element % divisor == 0]) or [-1]
    return answer

 

저자의 코드 처리결과 / 다른 풀이의 처리결과

 

기존 코드와 달리전진 점이 두 개였다.
전체적으로 시간은 줄었으나 테스트 6의 경우 오히려 시간이 늘어난 결과가 발생
해당원인은 나누어 떨어지는지 여부를 판단하는 코드에서 발생하는 것이아닐까?
element - element * element//divisor != 0 VS element % divisor == 0
그래서 OR을 활용하되 나누어 떨어지는 것은 기존의 코드로 적용해보았다
def solution(arr, divisor):
    answer = sorted([element for element in arr if element- divisor*(element//divisor) == 0]) or [-1]
    return answer

 

 

테스트 6의 경우, 시간이 더 줄어들었다.
하지만 다른 테스트들은 더 많이 걸린다.

만약 트래픽이 많을 경우 2번째 코드로 사용하고
처리할 데이터가 많을 경우 3번째 코드를 사용하면 
효율적이지 않을까?

문제 바로가기

 

 

728x90
Comments