Today I Learned/Python 문제풀이

[프로그래머스] Lv1. 나누어 떨어지는 숫자 배열

하나719 2020. 10. 31. 17:53
반응형

문제 참고 링크

 

코딩테스트 연습 - 나누어 떨어지는 숫자 배열

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

programmers.co.kr

Solution1. (내 풀이)

문제 설명 순서대로 풀이한 방식이다.

 

1) 리스트를 순회하면서,  조건에 맞는지 검사한다.

2) 조건에 맞으면 answer list에 추가한다.

3) 리스트를 다 순회한 후에, answer list가 비어있으면 -1을 추가해준다.

4) 정렬하여 return 한다.

def solution(arr, divisor):
	answer = []
    
    # 조건에 만족하면 answer에 추가
    for i in arr:
    	if i % divisor == 0:
        	answer.append(i)
    
    # list를 모두 검사했는데, 조건에 만족하는 것이 없어서 비어있을 경우 -1 넣어주기
    if len(answer) == 0:
    	answer.append(-1)

    return sorted(answer)

Solution2. 

solution1과 풀이 아이디어는 비슷하지만, 표기 방식이 깔끔하다.

python의 list comprehension을 활용해서, 조건에 맞는 값을 list로 만들어주었다.

여기서 또 인상적이었던 부분은 [ ] or [ ] 인데, 앞에 리스트가 참이 아닐때 (비어있을때) 뒤에 리스트를 만들어준다.

그래서 리스트가 비어있는지 따로 검사하지 않고, 간단하게 조건을 추가할 수 있었다.

def solution(arr, divisor):
	answer = [x for x in arr if x % divisor == 0] or [-1]
    return sorted(answer)

 

List Comprehension 참고

 

(Tutorial) Python List Comprehension

Learn how to effectively use list comprehension in Python to create lists, to replace (nested) for loops and the map(), filter() and reduce() functions, ...!

www.datacamp.com

반응형