ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 36. 튜플
    코딩 테스트/Level 2 2020. 8. 19. 11:55
    반응형

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

    튜플
    2019 카카오 개발자 겨울 인턴십 
    2162명 완료

    문제를 보면 '튜플'의 정의와 '집합'의 정의가 있습니다. 
    (전 잘못 읽어서 2번을 읽었습니다. )
    다 아시듯 튜플은 순서 있음 중복 가능, 집합은 순서 없음, 중복 불가.
    상식적인 정의입니다. 

    지문을 읽어보면 중복도 없고, 빠진 것도 없기 때문에
    순서가 뒤죽박죽일 수도 있다는 것만 주의하면 됩니다.  

     

    코딩테스트 연습 - 튜플

    "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

    programmers.co.kr

    파이썬

    def solution(s):
        s_list = sorted((set(map(int, each.split(','))) for each in s[2:-2].split('},{')),
                        key=lambda a: len(a))
        answer = list(s_list[0])
        for i in range(len(s_list) - 1):
            answer.append((s_list[i + 1] - s_list[i]).pop())
        return answer
    테스트 1 〉	통과 (0.03ms, 10.4MB)
    테스트 2 〉	통과 (0.04ms, 10.3MB)
    테스트 3 〉	통과 (0.03ms, 10.4MB)
    테스트 4 〉	통과 (0.04ms, 10.2MB)
    테스트 5 〉	통과 (0.17ms, 10.4MB)
    테스트 6 〉	통과 (0.33ms, 10.3MB)
    테스트 7 〉	통과 (4.26ms, 12MB)
    테스트 8 〉	통과 (12.97ms, 15.8MB)
    테스트 9 〉	통과 (6.37ms, 12.7MB)
    테스트 10 〉	통과 (14.05ms, 16.3MB)
    테스트 11 〉	통과 (20.29ms, 19MB)
    테스트 12 〉	통과 (28.43ms, 23.2MB)
    테스트 13 〉	통과 (28.67ms, 23.2MB)
    테스트 14 〉	통과 (31.78ms, 23.6MB)
    테스트 15 〉	통과 (0.02ms, 10.3MB)

     

    자바

    파이썬과 같은 로직을 구현했는데....
    힘들다 --;

    import java.util.*;
    
    class Solution {
        public int[] solution(String s) {
            var s1 = s.substring(2, s.length() - 2).split("},\\{");
            Arrays.sort(s1, Comparator.comparingInt(String::length));
            var s2 = new ArrayList<HashSet<Integer>>();
            for (var each : s1) {
                var temp = new HashSet<Integer>();
                for (var each2 : each.split(",")) {
                    temp.add(Integer.parseInt(each2));
                }
                s2.add(temp);
            }
            var answer = new int[s1.length];
            answer[0] = s2.get(0).iterator().next();
            for (var i = 1; i < s2.size(); i++) {
                var temp = new HashSet<>(s2.get(i));
                temp.removeAll(s2.get(i - 1));
                answer[i] = temp.iterator().next();
            }
            return answer;
        }
    }
    테스트 1 〉	통과 (1.94ms, 98.1MB)
    테스트 2 〉	통과 (2.14ms, 89.8MB)
    테스트 3 〉	통과 (2.56ms, 84.1MB)
    테스트 4 〉	통과 (2.19ms, 82.8MB)
    테스트 5 〉	통과 (3.64ms, 77.6MB)
    테스트 6 〉	통과 (7.02ms, 81.7MB)
    테스트 7 〉	통과 (19.00ms, 87.9MB)
    테스트 8 〉	통과 (38.71ms, 90.5MB)
    테스트 9 〉	통과 (25.07ms, 94.7MB)
    테스트 10 〉	통과 (42.16ms, 91.4MB)
    테스트 11 〉	통과 (58.45ms, 123MB)
    테스트 12 〉	통과 (80.41ms, 112MB)
    테스트 13 〉	통과 (69.27ms, 121MB)
    테스트 14 〉	통과 (71.68ms, 126MB)
    테스트 15 〉	통과 (1.76ms, 74.1MB)

     

    차라리 함수형이 ... 

    import java.util.*;
    import java.util.stream.Collectors;
    
    class Solution {
        public List<Integer> solution(String s) {
            return Arrays.stream(s.substring(2, s.length() - 2).split("},\\{"))
                    .sorted(Comparator.comparingInt(String::length))
                    .map(x -> Arrays.stream(x.split(","))
                            .map(Integer::valueOf)
                            .collect(Collectors.toList())
                    )
                    .reduce((a, b) -> {
                        b.removeAll(a);
                        a.add(b.get(0));
                        return a;
                    })
                    .orElse(null);
        }
    }
    테스트 1 〉	통과 (5.09ms, 69.4MB)
    테스트 2 〉	통과 (4.11ms, 71.3MB)
    테스트 3 〉	통과 (4.38ms, 74.4MB)
    테스트 4 〉	통과 (6.68ms, 79.4MB)
    테스트 5 〉	통과 (7.47ms, 74.1MB)
    테스트 6 〉	통과 (7.33ms, 78MB)
    테스트 7 〉	통과 (23.35ms, 84.1MB)
    테스트 8 〉	통과 (45.77ms, 103MB)
    테스트 9 〉	통과 (24.20ms, 93.4MB)
    테스트 10 〉	통과 (37.87ms, 98.7MB)
    테스트 11 〉	통과 (61.12ms, 84.8MB)
    테스트 12 〉	통과 (73.91ms, 109MB)
    테스트 13 〉	통과 (61.78ms, 106MB)
    테스트 14 〉	통과 (64.74ms, 114MB)
    테스트 15 〉	통과 (3.64ms, 71.1MB)
    반응형
Designed by Tistory.