[Programmers] 숫자 짝꿍 - JAVA

최영환·2022년 11월 22일
0

Programmers

목록 보기
10/43
post-thumbnail

💡 문제

💬 입출력 예시

📌 풀이(소스코드)

import java.util.ArrayList;
import java.util.Comparator;

class Solution {
	public String solution(String X, String Y) {
		String answer = "";
		int[] x = new int[10];
		int[] y = new int[10];

		// 0 부터 9 까지의 정수 배열에 등장 횟수 입력
		for (int i = 0; i < X.length(); i++) {
			x[X.charAt(i) - '0']++;
		}
		for (int i = 0; i < Y.length(); i++) {
			y[Y.charAt(i) - '0']++;
		}

		// 등장 횟수가 둘 다 0 이 아니면 추가
		ArrayList<Integer> list = new ArrayList<Integer>();
		for (int i = 0; i < 10; i++) {
			while (x[i] > 0 && y[i] > 0) {
				list.add(i);
				x[i]--;
				y[i]--;
			}
		}
		
		// 리스트 크기가 0인 경우 짝꿍이 없으므로 answer = -1
		if (list.size() == 0) {
			answer = "-1";
		}
		// 리스트 내림차순 정렬 후 앞 숫자부터 answer 에 추가
		// 0으로만 구성되어있을 경우 answer = 0
		else {
			list.sort(Comparator.reverseOrder());
			
			int sum = 0;
			StringBuilder sb = new StringBuilder();
			for(int i = 0; i < list.size(); i++) {
				sum += list.get(i);
				sb.append(list.get(i).toString());
			}
			if (sum == 0) {
				answer = "0";
			}
			else {
				answer = sb.toString();	
			}
		}
		
		return answer;
	}
}

📄 해설

  • 0 부터 9 까지의 등장 횟수를 저장할 배열 xy 를 선언하고, 문자열을 순회하며 등장 횟수를 증가시킴
  • xy 에 대하여, 등장 횟수가 둘 다 0 이 아닐때까지 짝꿍 리스트 list 에 추가하고, 해당 인덱스의 값을 감소시킴
  • 리스트를 확인하여 결과값 처리
    1. 리스트 크기가 0인 경우 짝꿍이 없는 것으로 간주 -> answer = -1
    2. 리스트 내림차순 정렬 후 앞 숫자부터 answer 에 추가하며, 그 합을 계산하고, 합이 0인 경우 answer 는 0
    3. 1 과 2에 해당하지 않을 경우 answer 는 짝꿍이 완성됨
  • 최초에는 answer += list.get(i).toString(); 으로 코드를 작성하였으나, 시간 초과가 발생하여 StringBuilder 클래스를 사용하였음
profile
조금 느릴게요~

0개의 댓글