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

2024. 4. 23. 18:32·코딩테스트 연습/Programmers
728x90

 

문제

두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다). X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다. X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.

예를 들어, X = 3403이고 Y = 13203이라면, X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 3, 0, 3으로 만들 수 있는 가장 큰 정수인 330입니다. 다른 예시로 X = 5525이고 Y = 1255이면 X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 2, 5, 5로 만들 수 있는 가장 큰 정수인 552입니다(X에는 5가 3개, Y에는 5가 2개 나타나므로 남는 5 한 개는 짝 지을 수 없습니다.)
두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 return하는 solution 함수를 완성해주세요.

 

제한사항

  • 3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000입니다.
  • X, Y는 0으로 시작하지 않습니다.
  • X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.

입출력 예

X Y result
"100" "2345" "-1"
"100" "203045" "0"
"100" "123450" "10"
"12321" "42531" "321"
"5525" "1255" "552"

 

풀이

class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        int[] intX = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        int[] intY = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        
        for(int i=0; i<X.length(); i++) {
            intX[X.charAt(i) - '0']++;
        }
        
        for(int i=0; i<Y.length(); i++) {
            intY[Y.charAt(i) - '0']++;
        }
        
        for(int i=9; i>=0; i--) {
            if(intX[i] != 0 || intY[i] != 0) {
                int min = Math.min(intX[i], intY[i]);
                answer.append(String.valueOf(i).repeat(min));    // 최소 개수만큼 넣기
            }
        }
        
        if(answer.length() == 0)
            return "-1";
        else if(answer.charAt(0) == '0')
            return "0";
        
        return answer.toString();
    }
}

 

숫자는 0부터 9까지 한정되어 있기 때문에 문자열에서 나오는 숫자의 개수를 담는 int형 배열을 통해 중복되는 숫자를 계산했다. 0이 아닌 경우를 통해 중복 숫자를 구하고, 적은 개수로 나온 수만큼 StringBuilder에 넣는 형식으로 작성하였다. String 클래스 중에 repeat(int n) 메소드는 해당 개수만큼 반복해서 문자열을 생성하는 기능을 한다.

answer의 길이가 0이면 중복되는 숫자가 없기 때문에 -1을 리턴하고, 첫번째 문자가 0이면 모든 문자열이 0으로 구성되어 있기 때문에 0을 리턴하였다.

 

 

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/courses/30/lessons/131128
728x90
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 연습 > Programmers' 카테고리의 다른 글

[프로그래머스] 3진법 뒤집기  (0) 2024.04.30
[프로그래머스] 체육복  (2) 2024.04.25
[프로그래머스] 가장 가까운 같은 글자  (1) 2024.04.20
[프로그래머스] 모의고사  (0) 2024.04.18
[프로그래머스] 둘만의 암호  (0) 2024.04.17
'코딩테스트 연습/Programmers' 카테고리의 다른 글
  • [프로그래머스] 3진법 뒤집기
  • [프로그래머스] 체육복
  • [프로그래머스] 가장 가까운 같은 글자
  • [프로그래머스] 모의고사
hxxzz
hxxzz
개발새발 안 되게 개발 노력 중
  • hxxzz
    개발새발
    hxxzz
  • 전체
    오늘
    어제
    • 분류 전체보기 (104)
      • Java (3)
      • Back-End (9)
        • Spring Boot (7)
        • DevOps (1)
        • Redis (1)
      • Computer Scrience (4)
        • Data Structrue (4)
        • Algorithm (0)
      • SQLD (3)
      • 코딩테스트 연습 (85)
        • Programmers (30)
        • 백준 (15)
        • etc. (0)
        • 99클럽 (40)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    jpa
    java
    SQLD
    프로그래머스
    코딩테스트 준비
    BFS
    Spring Boot
    redission
    dfs
    til
    LeetCode
    자료구조
    SpringBoot
    N+1 문제
    백준
    SQL
    99클럽
    Stack
    개발자 취업
    스택
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
hxxzz
[프로그래머스] 숫자 짝꿍
상단으로

티스토리툴바