컴닥 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)
반응형