프로그래머스 | 숫자 짝꿍 (Java)

mul·2023년 2월 9일
0

알고리즘

목록 보기
15/65
post-custom-banner

🔒 문제

프로그래머스 Lv.1 숫자 짝꿍

🔑 해결

두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 return하는 solution 함수를 작성하는 문제이다.

X, Y에 나오는 숫자의 빈도를 배열 x, y에 저장한다. 그리고 공통으로 나타나는 정수(빈도가 0이 아닌 수)를 큰 수부터 빈도수만큼 StringBuilder에 append한다.

  1. 0~9까지 X에 나오는 숫자의 빈도를 배열 x에 저장
    1-1. X.length()만큼 for문을 돌려 출현한 숫자(X.charAt(i))를 정수로 변환(X.charAt(i) - '0')한 x 인덱스에 빈도 1 증가
  2. Y도 X와 동일한 방식으로 진행
  3. 9~0까지 for문을 돌려 큰 수부터 빈도수만큼 sp에 append
    3-1. 공통으로 나타나는 정수(x[i] > 0 && y[i] > 0)의 빈도수는 x[i]나 y[i] 중 작은 수이다.
    3-2. 작은 수만큼 for문을 돌려 sb에 sppend
  4. sb를 toString을 통해 String으로 변환해 answer에 저장한 후 예외처리
    4-1. answer가 ""라면 공통으로 나타나는 정수가 없는 것으로 판단. answer에 "-1" 저장
    4-2. answer의 첫번째 글자가 0이라면(chatAt(0) == '0') answer의 모든 글자가 0으로 이루어진 것으로 판단. answer에 "0"저장

🔓 코드

class Solution {
    public String solution(String X, String Y) {
        String answer = "";
		
        // 0~9까지 X에 나오는 숫자의 빈도를 저장할 배열 x
		int[] x = new int[10];
		for (int i = 0; i < X.length(); i++) {
			x[X.charAt(i) - '0']++;
		}
        // 0~9까지 Y에 나오는 숫자의 빈도를 저장할 배열 y
		int[] y = new int[10];
		for (int i = 0; i < Y.length(); i++) {
			y[Y.charAt(i) - '0']++;
		}
		
        // 공통으로 나타나는 정수를 사용해 짝꿍 만들기
		StringBuilder sb = new StringBuilder();
		for (int i = 9; i >= 0; i--) {
			if(x[i] > 0 && y[i] > 0) {
				if (x[i] < y[i]) {
					for (int j = 0; j < x[i]; j++) {
						sb.append(i + "");
					}
				} else {
					for (int j = 0; j < y[i]; j++) {
						sb.append(i + "");
					}
				}
			}
		}
		
		answer = sb.toString();
		// 짝꿍 예외처리
        if ("".equals(answer)) {
			answer = "-1";
		} else if (answer.charAt(0) == '0') {
			answer = "0";
		}
		
		return answer;
    }
}
post-custom-banner

0개의 댓글