ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 12. 나누어 떨어지는 숫자 배열
    코딩 테스트/Level 1 2019. 10. 10. 23:52
    반응형

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

     

    프로그래머스

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

    programmers.co.kr

     

    파이썬

    무난한 답입니다.

    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 };
        }
    }
    반응형
Designed by Tistory.