본문 바로가기
알고리즘/프로그래머스

[프로그래머스 / 숫자 짝꿍 / JAVA]

by KDW999 2023. 1. 30.

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

 

프로그래머스

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

programmers.co.kr

 

문제 접근

StringBuilder가 데이터를 붙이는 식이라 String보다 연산 속도가 빠르다고하여 StringBuiler를 썼으나 내 방법은 끝까지 시간 초과가 걸렸다.

 

* 참고한 풀이

아스키코드를 활용하여 x, y배열에 문자열 X, Y의 숫자를 카운팅한게 인상적

import java.util.*;

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}; // 숫자가 0~9라서 0이 10개, new int[10]로도 가능하나
       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; // x[] 배열에 숫자 카운팅     
       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); // StriugBuilder 문자열 붙이기
           }
       }
       
       if(answer.toString().isEmpty()) return "-1"; // 값 없을 때, toString이 StringBuilder 값 사용
       else if(answer.toString().charAt(0) == '0') return "0"; // 0으로 시작 시
       else  return answer.toString();
       
}
}

 

시간 초과한 내 풀이

 public String solution(String X, String Y) {
	        StringBuilder answer = new StringBuilder();
	        
	        ArrayList<String> xArr = new ArrayList<>();
	        ArrayList<String> yArr = new ArrayList<>();
	        
	       for (int i = 0; i < X.length(); i++) xArr.add(String.valueOf(X.charAt(i)));
		   for (int i = 0; i < Y.length(); i++) yArr.add(String.valueOf(Y.charAt(i)));
			
	        ArrayList<Integer> sum = new ArrayList<>();
	        
	        for(int i=0; i<xArr.size(); i++) {
	        	
	        	for(int j=0; j<yArr.size(); j++) {
	        		if(xArr.get(i).equals(yArr.get(j))) {
	        			sum.add(Integer.valueOf(xArr.get(i)));
	        			xArr.remove(i);
	        			yArr.remove(j);
	        			i=0;
	        			j=0;
	        		}
	        	}
	        }

	        Collections.sort(sum);
			
	        for (int i = sum.size() - 1; i >= 0; i--) answer.append(sum.get(i));
	         
	        if(answer.toString().isEmpty()) return "-1";
	        else if(answer.charAt(0) == '0') return "0";		
			else return answer.toString();
	    }

댓글