소소한 컴퓨터 이야기

나누어 떨어지는 숫자 배열

by Cori

문제

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

 

제한사항

· arr은 자연수를 담은 배열입니다.

· 정수 i, j에 대해 i != j 이면 arr[i] != arr[j] 입니다. 

· divisor는 자연수입니다.

· array는 길이 1 이상인 배열입니다. 

 

입출력 예

arr divisor return
[5, 9, 7, 10] 5 [5, 10]
[2, 36, 1, 3] 1 [1, 2, 3, 36]
[3, 2, 6] 10 [-1]

풀이

1. Me

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

리스트 내포를 사용하여 arr 배열에 들어있는 값들이 divisor로 나누어 떨어지면 answer 리스트에 저장 후 정렬하여 반환한다. 아무 값도 들어있지 않으면 (나누어 떨어지는 값이 없으면) -1을 반환 

 

2. Others

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

많은 걸 배우게 해 준 코드.. 리스트 내포([n for n in arr if n % divisor == 0])를 사용한 것은 나와 같지만, 더 나아가 sorted() 함수를 적용해 정렬까지 추가로 해 주었다. 추가로, or을 활용하여 앞 부분이 비어 있어 False로 나오더라도 참 값이자 문제에서 빈 리스트일 경우 요구하는 값인 [-1]을 사용하여 해당 구문이 실행되도록 하였다. (작동원리는 저의 생각이며, 틀린 점 있다면 댓글로 피드백 주세요..!)


자료 정리

1. 리스트 내포

0) for문을 활용한 리스트 내포 

-> [표현식 for 항목 in 반복가능객체 if 조건문] 와 같은 형태로 리스트 내포를 사용한다. 

 

1) if .. else를 사용하는 리스트 내포 

-> [f(x) if condition else g(x) for x in list] 와 같은 형태로 리스트 내포를 사용한다. 

    if .. else 구문이 for 문 앞에 나온다는 것에 주의해서 사용하자 ! (매번 for문 뒤에 사용하려고 했던 바보같은 나..)

 

* 단, else 가 없다면, if 문은 맨 마지막 위치에 적는다. 

list_l = ['A', 'B', 'C'] 

# if ... else를 포함한 리스트 내포 
new_list = [str(x.strip()) if x is not None else '' for x in my_list]

# if 구문만 포함한 리스트 내포 
new_list2 = [str(x.strip()) for x in my_list if x i not None]

2) 다중 리스트 내포 

-> [표현식 for 항목1 in 반복가능객체1 if 조건문1 for 항목2 in 반복가능객체2 if 조건문2 ...]와 같이

    다중 리스트 내포를 사용하는 것도 가능하다. 일반적인 코드에서 바깥쪽의 for문이 앞쪽으로, 안쪽의 for문이 뒤쪽으로 가는 구조

# 일반적인 구구단 코드 
result = []
for x in range(2, 10):
	for y in range(1, 10):
    	result.append(x*y)

# 이를 리스트 내포로 바꾸면 다음과 같다 
result = [x*y for x in range(2, 10) for y in range(1, 10)]

'CS > Coding Test' 카테고리의 다른 글

가운데 글자 가져오기  (0) 2021.08.22
같은 숫자는 싫어  (0) 2021.08.22
두 정수 사이의 합  (0) 2021.08.21
문자열 내 p와 y의 개수  (0) 2021.08.21
문자열 다루기 기본  (0) 2021.08.21

블로그의 정보

코딩하는 오리

Cori

활동하기