-
36. 튜플코딩 테스트/Level 2 2020. 8. 19. 11:55반응형
https://programmers.co.kr/learn/courses/30/lessons/64065
튜플
2019 카카오 개발자 겨울 인턴십
2162명 완료문제를 보면 '튜플'의 정의와 '집합'의 정의가 있습니다.
(전 잘못 읽어서 2번을 읽었습니다. )
다 아시듯 튜플은 순서 있음 중복 가능, 집합은 순서 없음, 중복 불가.
상식적인 정의입니다.지문을 읽어보면 중복도 없고, 빠진 것도 없기 때문에
순서가 뒤죽박죽일 수도 있다는 것만 주의하면 됩니다.파이썬
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)
반응형