코딩 테스트/Level 2
36. 튜플
컴닥
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)
반응형