-
12. 나누어 떨어지는 숫자 배열코딩 테스트/Level 1 2019. 10. 10. 23:52반응형
https://programmers.co.kr/learn/courses/30/lessons/12910
파이썬
무난한 답입니다.
def solution(arr, divisor): answer = [] count = False for each in arr: if each % divisor == 0: answer.append(each) count = True answer.sort() if not count: answer.append(-1) return answer
테스트 1 〉 통과 (0.02ms, 10.2MB) 테스트 2 〉 통과 (0.01ms, 10.1MB) 테스트 3 〉 통과 (0.01ms, 10.2MB) 테스트 4 〉 통과 (0.02ms, 10.2MB) 테스트 5 〉 통과 (0.01ms, 10.3MB) 테스트 6 〉 통과 (4.36ms, 13.5MB) 테스트 7 〉 통과 (0.16ms, 10.3MB) 테스트 8 〉 통과 (0.00ms, 10.3MB) 테스트 9 〉 통과 (0.10ms, 10.4MB) 테스트 10 〉 통과 (0.14ms, 10.2MB) 테스트 11 〉 통과 (0.07ms, 10.2MB) 테스트 12 〉 통과 (0.06ms, 10.3MB) 테스트 13 〉 통과 (0.22ms, 10.2MB) 테스트 14 〉 통과 (0.10ms, 10.3MB) 테스트 15 〉 통과 (0.13ms, 10.3MB) 테스트 16 〉 통과 (0.03ms, 10.1MB)
조금 정리 했습니다.
sort와 sorted의 차이가 궁금하지 않으십니까?
inma.tistory.com/137제너레이터에 sorted를 거는 것도 가능하네요.
def solution(arr, divisor): answer = sorted(each for each in arr if not (each % divisor)) return answer if answer else [-1]
파이썬 3.8 이후로는 바다코끼리 연산자를 사용할 수 있습니다.
def solution(arr, divisor): return answer if (answer := sorted(each for each in arr if not (each % divisor))) else [-1]
하지만, or을 이용해서 줄이는 게 더 좋군요.
def solution(arr, divisor): return sorted(each for each in arr if not (each % divisor)) or [-1]
테스트 1 〉 통과 (0.01ms, 10.1MB) 테스트 2 〉 통과 (0.01ms, 10.2MB) 테스트 3 〉 통과 (0.01ms, 10.2MB) 테스트 4 〉 통과 (0.01ms, 10.2MB) 테스트 5 〉 통과 (0.01ms, 10.2MB) 테스트 6 〉 통과 (2.96ms, 13.1MB) 테스트 7 〉 통과 (0.13ms, 10.4MB) 테스트 8 〉 통과 (0.01ms, 10.1MB) 테스트 9 〉 통과 (0.09ms, 10.3MB) 테스트 10 〉 통과 (0.08ms, 10.4MB) 테스트 11 〉 통과 (0.03ms, 10.3MB) 테스트 12 〉 통과 (0.03ms, 10.4MB) 테스트 13 〉 통과 (0.22ms, 10.2MB) 테스트 14 〉 통과 (0.08ms, 10.4MB) 테스트 15 〉 통과 (0.07ms, 10.3MB) 테스트 16 〉 통과 (0.02ms, 10.3MB)
함수형 프로그래밍
(리스트 컴프리헨션이 더 빠르네요.)def solution(arr, divisor): return sorted(filter(lambda x: not (x % divisor), arr)) or [-1]
테스트 1 〉 통과 (0.02ms, 10.1MB) 테스트 2 〉 통과 (0.02ms, 10.2MB) 테스트 3 〉 통과 (0.03ms, 10.3MB) 테스트 4 〉 통과 (0.03ms, 10.2MB) 테스트 5 〉 통과 (0.01ms, 10.2MB) 테스트 6 〉 통과 (6.19ms, 13.4MB) 테스트 7 〉 통과 (0.44ms, 10.5MB) 테스트 8 〉 통과 (0.00ms, 10.2MB) 테스트 9 〉 통과 (0.19ms, 10.4MB) 테스트 10 〉 통과 (0.15ms, 10.2MB) 테스트 11 〉 통과 (0.07ms, 10.2MB) 테스트 12 〉 통과 (0.13ms, 10.4MB) 테스트 13 〉 통과 (0.46ms, 10.3MB) 테스트 14 〉 통과 (0.39ms, 10.2MB) 테스트 15 〉 통과 (0.34ms, 10.2MB) 테스트 16 〉 통과 (0.08ms, 10.3MB)
자바스크립트
함수형으로 풀어보았습니다.
function solution(arr, divisor) { let answer = arr.filter(value => value % divisor == 0).sort((a, b) => a - b) return answer.length?answer:[-1] }
자바
import java.util.Arrays; class Solution { public int[] solution(int[] arr, int divisor) { int[] answer = Arrays.stream(arr).filter(it -> it % divisor == 0).sorted().toArray(); return (answer.length == 0) ? new int[]{-1} : answer; } }
고
import "sort" func solution(arr []int, divisor int) (rtn []int) { for _, v := range arr { if v%divisor == 0 { rtn = append(rtn, v) } } sort.Sort(sort.IntSlice(rtn)) if len(rtn) == 0 { rtn = append(rtn, -1) } return }
import "sort" func solution(arr []int, divisor int) (rtn []int) { for _, v := range arr { if v%divisor == 0 { rtn = append(rtn, v) } } sort.Ints(rtn) if len(rtn) == 0 { rtn = append(rtn, -1) } return }
코틀린
class Solution { fun solution(arr: IntArray, divisor: Int): IntArray { var answer = arr.filter { it % divisor == 0 }.sorted().toIntArray() return if (answer.isEmpty()) intArrayOf(-1) else answer } }
C#
using System.Collections.Generic; public class Solution { public int[] solution(int[] arr, int divisor) { List<int> list = new List<int>(); foreach (int num in arr) if (num % divisor == 0) list.Add(num); list.Sort(); return (list.Count > 0) ? list.ToArray() : new int[] { -1 }; } }
반응형