[코딩테스트] 프로그래머스 - 숫자 짝꿍(Java)

proman·2022년 10월 30일
1

Coding-Test

목록 보기
21/21
post-thumbnail

⚾ 설명문

레벨: 1
언어: 자바(Java)

🎛 느낀점

해당문제는 자바코딩을 기본적으로 할줄알면 풀수있는 문제라고 생각합니다.
저는 Map을 사용해서 풀었습니다.

풀이방법
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개의 댓글