ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 17. 같은 숫자는 싫어
    코딩 테스트/Level 1 2019. 10. 15. 23:07
    반응형

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

     

     

    파이썬

    기본적인 풀이입니다. 

    def solution(arr):
        answer = []
        for i in range(len(arr) - 1):
            if arr[i] != arr[i+1]:
                answer.append(arr[i])
        answer.append(arr[-1])
        return answer
    테스트 1 〉	통과 (107.83ms, 997MB)
    테스트 2 〉	통과 (107.53ms, 996MB)
    테스트 3 〉	통과 (108.24ms, 997MB)
    테스트 4 〉	통과 (107.57ms, 998MB)

    리스트 컴프리헨션으로 줄여 쓸 수 있습니다. 나쁘진 않은 것 같습니다. 

    def solution(arr):
        answer = [arr[i] for i in range(len(arr) - 1) if arr[i] != arr[i+1]]
        answer.append(arr[-1])
        return answer
    테스트 1 〉	통과 (102.06ms, 994MB)
    테스트 2 〉	통과 (102.20ms, 994MB)
    테스트 3 〉	통과 (108.16ms, 994MB)
    테스트 4 〉	통과 (102.38ms, 995MB)

    한 줄의 로망

    def solution(arr):
        return [arr[i] for i in range(len(arr) - 1) if arr[i] != arr[i + 1]] + [arr[-1]]
    테스트 1 〉	통과 (110.50ms, 994MB)
    테스트 2 〉	통과 (110.02ms, 994MB)
    테스트 3 〉	통과 (103.85ms, 994MB)
    테스트 4 〉	통과 (104.58ms, 995MB)

     

    자바스크립트

    코드를 한 줄 줄이기 위해 for문의 인덱스를 수정했습니다. 

    function solution3(arr) {
        let answer = [arr[0]]
        for (let i = 1; i < arr.length; i++) {
            if (arr[i-1] != arr[i]) {
                answer.push(arr[i])
            }
        }
        return answer
    }

    자바스크립트의 필터에선 index가 됩니다. @,.@

    좋아요 하나 남겼습니다. 제가 푼 게 아닙니다. 

    function solution(arr) {
        return arr.filter((val, index) => val != arr[index + 1]);
    }

     

    자바

    마음에 드는 풀이는 아닙니다...

    ArrayList가 거추장스럽게 느껴집니다.

    자바에서 원시 자료형의 존재의 이유는 잘(?) 알고 있습니다만.....
    형이나 컬랙션 변환을 할 때 빡치는 기분이 슬금슬금 올라오는 건..... 
    저만 그런 건 아니겠지요?

    import java.util.*;
    
    class Solution {
        public int[] solution(int[] arr) {
            ArrayList<Integer> temp = new ArrayList<>();
            temp.add(arr[0]);
            for (int i = 1; i < arr.length; i++) {
                if (arr[i - 1] != arr[i]) temp.add(arr[i]);
            }
            return temp.stream().mapToInt(i -> i).toArray();
        }
    }

     

    golang

    func solution(arr []int) []int {
    	rtn := []int{arr[0]}
    	for _, n := range arr {
    		if rtn[len(rtn)-1] != n {
    			rtn = append(rtn, n)
    		}
    	}
    	return rtn
    }
    반응형
Designed by Tistory.