본문 바로가기

Server Programming/BackEnd Project

숫자 짝꿍-String.repeat, append, String=char+"", startsWith("0"), char-48=숫자

반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


import java.util.*;
import java.util.stream.*;
class Solution {
    public String solution(String X, String Y) {
        String answer = "";

        //int[] -> Integer[] 은 되는데
        //char[] -> Character[]은 안되는 이유?
        //Arrays.stream().boxed.toArray(Character[]::new)
        //Arrays.asList();
        
        Map<Character,Integer> mapX = new HashMap<>();
        Map<Character,Integer> mapY = new HashMap<>();
        Integer[] xInt = new Integer[X.length()];
        int j=0;
        for(char x : X.toCharArray()) {
            xInt[j++]=Character.getNumericValue(x);
            
        }
        Arrays.sort(xInt,Collections.reverseOrder());
        
        for(int x : xInt) {            
            mapX.put((char) (x+'0'), mapX.getOrDefault((char) (x+'0'), 0)+1);
        }
        for(char x : Y.toCharArray()) mapY.put(x, mapY.getOrDefault(x, 0)+1);
        for(char x: mapX.keySet()){
            for(int i=0; i<mapX.get(x);i++){
                // System.out.println("Key:"+x);
                if(mapY.containsKey(x)) {
                    mapY.put(x, mapY.get(x)-1);
                    if(mapY.get(x)==0) mapY.remove(x);
                    answer+=x;
                }
            }
        }
        if(answer.startsWith("0")) answer="0";
        return answer=answer.equals("")?"-1":answer;
    }
}

 

import java.util.*;
import java.util.stream.*;
class Solution {
    public String solution(String X, String Y) {
        String answer = "";
		List<Character> listX= new ArrayList<>();
        List<Character> listY= new ArrayList<>();
        for(char x: X.toCharArray()){
            listX.add(x);
        }
        for(char x: Y.toCharArray()){
            listY.add(x);
        }
        int j=0;
        List<String> result = new ArrayList<>();

        for(char x:listX){
            if(listY.contains(x)){
                // System.out.println(x);
                result.add(x+"");
                listY.remove(new Character(x));
                // System.out.println(listY.toString());
            }
        }
        
		Collections.sort(result, (s1,s2) -> (s2+s1).compareTo(s1+s2));
		

        StringBuilder sb = new StringBuilder();
		 for(String s : result) {
			 //answer+=s;
             sb.append(s);
		 }
        answer=sb.toString();
		 
		 //#2. 문자열 시작으로 변경
		//맨 앞 숫자가 0이면 0을 리턴	 
        if(answer.startsWith("0")) answer="0";
        return answer=answer.equals("")?"-1":answer;
    }
}

 

 

1. 우선순위큐로 풀어보기

2. 아스키코드값으로 풀어보기 (char-48) A:65, 0:48이므로

3. 0~9까지 해당 값만 생각해서 배열로 풀어보기

import java.util.*;
import java.util.stream.*;
class Solution {
    public String solution(String X, String Y) {
        String answer = "";


        //1. 0~9까지의 배열
        //2. 우선순위큐 최대힙
        //3. 아스키코드 값으로 풀기 -48
        //int[] -> Integer[] 은 되는데
        //char[] -> Character[]은 안되는 이유?
        //Arrays.stream().boxed.toArray(Character[]::new)
        //Arrays.asList();
        
        Map<Character,Integer> mapX = new HashMap<>();
        Map<Character,Integer> mapY = new HashMap<>();
        for(char x : X.toCharArray()) mapX.put(x, mapX.getOrDefault(x, 0)+1);
        for(char x : Y.toCharArray()) mapY.put(x, mapY.getOrDefault(x, 0)+1);
        
        int cnt=0;
        List<String> strNums = new ArrayList<>();
        for(char c : mapX.keySet()){
            if(mapY.containsKey(c)){
                String tmp = c+"";
                tmp=tmp.repeat(Math.min(mapX.get(c), mapY.get(c)));
                strNums.add(tmp);
            }
        }
        Collections.sort(strNums, (s1,s2)->(s2+s1).compareTo(s1+s2));
        for(String x: strNums){
            answer+=x;
        }

        if(answer.startsWith("0")) answer="0";
        return answer=answer.equals("")?"-1":answer;
    }
}

 

반응형