본문 바로가기

알고리즘 테스트 공부

숫자 짝꿍

@@풀이방법 2가지 정리@@

 

 

풀이방법
1. x와 y의 문자 카운터를 담는 map 선언 및 값 put
2. x와 y의 같은 문자에 해당하는 최소카운팅을 값을 list에 추가
3. list 값이 없을시 -1
4. list에 0만 존재시 0
5. 외의 값 반환

가장 좋아요 많이 받은 코드
저와의 차이점이라면 저는 Map 사용했지만 좋아요 많이받는 코드는 배열을 사용해서 index가 key이고 값이 카운팅 값이라는 차이점입니다.
1. x와 y의 배열 선언
2. 0의 아스키코드가 48인데 character값에서 48을 빼면 해당 맞는 int값으로 변환
3.빈문자열 비교시 -1
4.정렬된값이 들어있는 문자열에서 첫번째값이 0이면 0
5.외의 값 반환

내가 풀이한 코드!

import java.util.*;
import java.util.stream.*;


class Solution {
    public String solution(String X, String Y) {
        Map<String, Integer> xMap = new HashMap<>();
        Map<String, Integer> yMap = new HashMap<>();
        
        List<String> list = new ArrayList<>();
        
        for(String key: X.split("")) {
            xMap.put(key, xMap.getOrDefault(key, 0)+1);
        }
        
        for(String key: Y.split("")) {
            yMap.put(key, yMap.getOrDefault(key, 0)+1);
        }
        
        for(String key: xMap.keySet()) {
            if(!yMap.containsKey(key)) continue;
            
            int length = Math.min(xMap.get(key), yMap.get(key));
            for(int i = 0; i < length; i++) {
                list.add(key);
            }
        }
        
        String result = list.stream()
            .sorted(Collections.reverseOrder())
            .collect(Collectors.joining());
        
        if(result.isEmpty()) return "-1";
        if(result.replaceAll("0", "").isEmpty()) return "0";
        return result;
    }
}

베스트 코드!

class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        int[] x = {0,0,0,0,0,0,0,0,0,0};
        int[] y = {0,0,0,0,0,0,0,0,0,0};
        for(int i=0; i<X.length();i++){
           x[X.charAt(i)-48] += 1;
        }
        for(int i=0; i<Y.length();i++){
           y[Y.charAt(i)-48] += 1;
        }

        for(int i=9; i >= 0; i--){
            for(int j=0; j<Math.min(x[i],y[i]); j++){
                answer.append(i);
            }
        }
        if("".equals(answer.toString())){
           return "-1";
        }else if(answer.toString().charAt(0)==48){
           return "0";
        }else {
            return answer.toString();
        }
    }
}

'알고리즘 테스트 공부' 카테고리의 다른 글

부족한 금액 계산하기  (0) 2023.09.23
성격 유형 검사하기  (0) 2023.09.18
삼총사  (0) 2023.09.16
콜라문제  (0) 2023.09.14
옹알이(2)  (0) 2023.09.13