[코딩테스트] 위장

시나브로·2021년 6월 10일
0

코딩테스트

목록 보기
3/34
post-thumbnail

문제


위장 문제 바로가기



제출 코드(Java)


첫번째 코드 제출

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에 대해 배울 수 있었지만, 성능에서는 다소 좋지 않은 퍼포먼스를 보이고 있다.



제출 코드(Python)


첫번째 코드 제출

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이나 내장 라이브러리를 사용하면 성능이 다소 떨어지는건 어쩔 수 없나보다. 파이썬이야 워낙 빠르니 그리 유의미한 차이는 아니겠지만.



profile
Be More!

0개의 댓글