import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int result = 1;
Map<String, Integer> map = new HashMap<>();
for(String[] value :clothes){
map.put(value[1], map.getOrDefault(value[1], 0) + 1);
}
for (int v : map.values()){
result *= v+1;
}
return result-1;
}
}
각 요소의 값들에 대한 경우의 수를 곱해준 다음, 마지막으로 전혀 입지 않았을 때 1을 빼준 값을 return해줬다
완주하지 못한 선수에서 배웠던 getOrDefault
를 사용했다. 편하지만 java8부터 지원되는 method니 참고,,,
정확성 테스트
정확성 테스트
테스트 1 〉 통과 (0.10ms, 52.5MB)
테스트 2 〉 통과 (0.07ms, 52.8MB)
테스트 3 〉 통과 (0.08ms, 52.3MB)
테스트 4 〉 통과 (0.07ms, 52.5MB)
테스트 5 〉 통과 (0.05ms, 52.1MB)
테스트 6 〉 통과 (0.05ms, 54.2MB)
테스트 7 〉 통과 (0.07ms, 52.5MB)
테스트 8 〉 통과 (0.07ms, 53MB)
테스트 9 〉 통과 (0.08ms, 52.6MB)
테스트 10 〉 통과 (0.09ms, 52.8MB)
테스트 11 〉 통과 (0.05ms, 51.5MB)
테스트 12 〉 통과 (0.11ms, 52.6MB)
테스트 13 〉 통과 (0.08ms, 51.9MB)
테스트 14 〉 통과 (0.03ms, 52.2MB)
테스트 15 〉 통과 (0.04ms, 55.8MB)
테스트 16 〉 통과 (0.03ms, 51.8MB)
테스트 17 〉 통과 (0.06ms, 52.2MB)
테스트 18 〉 통과 (0.07ms, 53.6MB)
테스트 19 〉 통과 (0.05ms, 52.3MB)
테스트 20 〉 통과 (0.08ms, 52.9MB)
테스트 21 〉 통과 (0.05ms, 52.5MB)
테스트 22 〉 통과 (0.05ms, 52.3MB)
테스트 23 〉 통과 (0.05ms, 52.5MB)
테스트 24 〉 통과 (0.05ms, 52MB)
테스트 25 〉 통과 (0.05ms, 51.8MB)
테스트 26 〉 통과 (0.12ms, 53.3MB)
테스트 27 〉 통과 (0.05ms, 52MB)
테스트 28 〉 통과 (0.05ms, 52.7MB)
import java.util.*;
import static java.util.stream.Collectors.*;
class Solution {
public int solution(String[][] clothes) {
return Arrays.stream(clothes)
.collect(groupingBy(p -> p[1], mapping(p -> p[0], counting())))
.values()
.stream()
.collect(reducing(1L, (x, y) -> x * (y + 1))).intValue() - 1;
}
}
Collectors과 stream을 이용한 깔끔한 코드
정확성 테스트
정확성 테스트
테스트 1 〉 통과 (8.03ms, 52.7MB)
테스트 2 〉 통과 (8.02ms, 52.5MB)
테스트 3 〉 통과 (7.94ms, 52.6MB)
테스트 4 〉 통과 (8.06ms, 52.6MB)
테스트 5 〉 통과 (12.95ms, 52.8MB)
테스트 6 〉 통과 (9.69ms, 51.8MB)
테스트 7 〉 통과 (7.97ms, 53.4MB)
테스트 8 〉 통과 (8.02ms, 52.4MB)
테스트 9 〉 통과 (7.59ms, 52.7MB)
테스트 10 〉 통과 (8.17ms, 52.7MB)
테스트 11 〉 통과 (7.90ms, 53MB)
테스트 12 〉 통과 (7.61ms, 53.2MB)
테스트 13 〉 통과 (12.22ms, 52.9MB)
테스트 14 〉 통과 (8.07ms, 53.2MB)
테스트 15 〉 통과 (7.88ms, 52.5MB)
테스트 16 〉 통과 (14.41ms, 52.7MB)
테스트 17 〉 통과 (7.56ms, 53.2MB)
테스트 18 〉 통과 (8.42ms, 52.9MB)
테스트 19 〉 통과 (10.63ms, 52.1MB)
테스트 20 〉 통과 (7.38ms, 53.1MB)
테스트 21 〉 통과 (8.54ms, 53.1MB)
테스트 22 〉 통과 (7.96ms, 52.6MB)
테스트 23 〉 통과 (12.46ms, 52.2MB)
테스트 24 〉 통과 (13.00ms, 54.6MB)
테스트 25 〉 통과 (8.04ms, 52.7MB)
테스트 26 〉 통과 (14.15ms, 53.4MB)
테스트 27 〉 통과 (8.30ms, 52.7MB)
테스트 28 〉 통과 (9.80ms, 52.8MB)
덕분에 stream과 Collectors에 대해 배울 수 있었지만, 성능에서는 다소 좋지 않은 퍼포먼스를 보이고 있다.
from collections import Counter
def solution(clothes):
result = 1;
total_shares = Counter()
for value, key in clothes:
total_shares[key] = total_shares[key]+1
for i in total_shares.values():
result *= i+1
return result-1
이전에 배웠던 Counter를 사용해 java 해결방법과 동일하게 풀었다
정확성 테스트
정확성 테스트
테스트 1 〉 통과 (0.03ms, 10.2MB)
테스트 2 〉 통과 (0.01ms, 10.1MB)
테스트 3 〉 통과 (0.01ms, 10.2MB)
테스트 4 〉 통과 (0.03ms, 10MB)
테스트 5 〉 통과 (0.02ms, 10.1MB)
테스트 6 〉 통과 (0.02ms, 10.2MB)
테스트 7 〉 통과 (0.03ms, 10.3MB)
테스트 8 〉 통과 (0.02ms, 10.2MB)
테스트 9 〉 통과 (0.01ms, 10.2MB)
테스트 10 〉 통과 (0.01ms, 10.2MB)
테스트 11 〉 통과 (0.01ms, 10.1MB)
테스트 12 〉 통과 (0.03ms, 10.1MB)
테스트 13 〉 통과 (0.02ms, 10.2MB)
테스트 14 〉 통과 (0.01ms, 10.3MB)
테스트 15 〉 통과 (0.01ms, 10.2MB)
테스트 16 〉 통과 (0.01ms, 10.1MB)
테스트 17 〉 통과 (0.02ms, 10.2MB)
테스트 18 〉 통과 (0.02ms, 10.2MB)
테스트 19 〉 통과 (0.02ms, 10.2MB)
테스트 20 〉 통과 (0.02ms, 10.2MB)
테스트 21 〉 통과 (0.01ms, 10.1MB)
테스트 22 〉 통과 (0.01ms, 10.2MB)
테스트 23 〉 통과 (0.02ms, 10.1MB)
테스트 24 〉 통과 (0.02ms, 10.2MB)
테스트 25 〉 통과 (0.02ms, 10.1MB)
테스트 26 〉 통과 (0.03ms, 10.3MB)
테스트 27 〉 통과 (0.01ms, 10.2MB)
테스트 28 〉 통과 (0.02ms, 10.2MB)
def solution(clothes):
from collections import Counter
from functools import reduce
cnt = Counter([kind for name, kind in clothes])
print(cnt.values())
answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
return answer
reduce과 lambda 사용한 풀이법
정확성 테스트
정확성 테스트
테스트 1 〉 통과 (0.06ms, 10.1MB)
테스트 2 〉 통과 (0.05ms, 10.2MB)
테스트 3 〉 통과 (0.04ms, 10.1MB)
테스트 4 〉 통과 (0.05ms, 10.2MB)
테스트 5 〉 통과 (0.05ms, 10.2MB)
테스트 6 〉 통과 (0.04ms, 10.1MB)
테스트 7 〉 통과 (0.05ms, 10.3MB)
테스트 8 〉 통과 (0.04ms, 10.2MB)
테스트 9 〉 통과 (0.04ms, 10.2MB)
테스트 10 〉 통과 (0.04ms, 10.2MB)
테스트 11 〉 통과 (0.04ms, 10.2MB)
테스트 12 〉 통과 (0.05ms, 10.2MB)
테스트 13 〉 통과 (0.05ms, 10.2MB)
테스트 14 〉 통과 (0.04ms, 10.2MB)
테스트 15 〉 통과 (0.04ms, 10.2MB)
테스트 16 〉 통과 (0.04ms, 10.1MB)
테스트 17 〉 통과 (0.04ms, 10.2MB)
테스트 18 〉 통과 (0.05ms, 10.2MB)
테스트 19 〉 통과 (0.05ms, 10MB)
테스트 20 〉 통과 (0.04ms, 10.2MB)
테스트 21 〉 통과 (0.04ms, 10.2MB)
테스트 22 〉 통과 (0.04ms, 10.2MB)
테스트 23 〉 통과 (0.04ms, 10.2MB)
테스트 24 〉 통과 (0.05ms, 10.1MB)
테스트 25 〉 통과 (0.05ms, 10.1MB)
테스트 26 〉 통과 (0.05ms, 10.2MB)
테스트 27 〉 통과 (0.04ms, 10.2MB)
테스트 28 〉 통과 (0.05ms, 10.2MB)
java나 python이나 내장 라이브러리를 사용하면 성능이 다소 떨어지는건 어쩔 수 없나보다. 파이썬이야 워낙 빠르니 그리 유의미한 차이는 아니겠지만.