본문 바로가기
공부/알고리즘

숫자 짝꿍

by shining park 2024. 11. 3.

https://school.programmers.co.kr/learn/courses/30/lessons/131128

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

- 나의 풀이

✅ X, Y 문자열 ➡︎ <정수, 갯수> 로 이루어진 해시맵 xArr, yArr

  • HashMap<String, Integer> ➡︎ 문자열로 이루어져 있기 때문에 형변환 없이 정수 사용하기 위함
  • xArr.put(key, xArr.getOrDefault(key, 0)+1); ➡︎ 해당 key 의 값이 이미 있다면 +1, 없다면 초기값 0

 

✅ xArr, yArr 에 공통으로 들어있는 숫자 리스트 commonList ➡︎ 이후에 내림차순 정렬하기 위해 리스트 사용

  • ArrayList<String> ➡︎문자열 String, 정수 Integer 모두 내림차순 정렬이 가능하므로, 형변환 없이 사용하기 위함

 

✅ commonList 에 같은 숫자가 공통으로 여러번 들어갈 경우

ex) X = "5525", Y = "1255" 일 때, commonList = ["2", "5", "5"] 으로 3을 2번 더해줘야함

  • xArr ➡︎ {2=1, 5=3}
  • yArr ➡︎ {1=1, 2=1, 5=2}
  • commonList ➡︎ [2, 5, 5]

따라서 xArr, yArr 의 같은 정수 key의 value인 갯수가 적은 쪽의 갯수만큼 commonList에 추가해줘야함

➡︎ int cnt = Math.min(xArr.get(key), yArr.get(key));

 

✅ 리스트 정렬

  • Collections.sort(commonList); ➡︎ 오름차순
  • Collections.sort(commonList, Collections.reverseOrder()); ➡︎ 내림차순

 

- 나의 코드

import java.util.*;

class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        
        // <정수, 갯수> 해시맵
        HashMap<String, Integer> xArr = new HashMap<>();
        HashMap<String, Integer> yArr = new HashMap<>();
        
        //공통 숫자 리스트
        ArrayList<String> commonList = new ArrayList<>();
        
        for(String key : X.split("")) {
            xArr.put(key, xArr.getOrDefault(key, 0)+1);
        }
        
        for(String key : Y.split("")) {
            yArr.put(key, yArr.getOrDefault(key, 0)+1);
        }
        //System.out.println(xArr);
        
        // commonList 채우기
        for(String key : xArr.keySet()) {
            if(yArr.containsKey(key)) {
                //같은 숫자가 공통으로 여러번 들어갈 경우
                int cnt = Math.min(xArr.get(key), yArr.get(key));
                for(int i=0; i<cnt; i++) {
                    commonList.add(key);
                }
            }
        }
        
        //비어있으면 -1
        if(commonList.size() == 0) {
            return "-1";
        }
        
        //리스트 정렬 내림차순
        Collections.sort(commonList, Collections.reverseOrder());
        
        //정렬 후, 첫번째가 0이면 0
        if(commonList.get(0).equals("0")) {
            return "0";
        }
        
        //for _ answer.append
        for(String s : commonList) {
            answer.append(s);
        }
        
        return answer.toString();
    }
}

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

구명보트  (0) 2024.11.05
기능개발  (0) 2024.11.04
2019 카카오 개발자 겨울 인턴십 > 크레인 인형뽑기 게임  (0) 2024.11.02
N-Queen  (0) 2024.11.01
2019 KAKAO BLIND RECRUITMENT > 실패율  (1) 2024.11.01