본문 바로가기
알고리즘

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

by 상후 2023. 11. 16.
728x90
반응형

 

 

https://github.com/ROUTINE-STUDY/Algorithm

알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.

문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/131128

 

프로그래머스

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

programmers.co.kr

문제 설명

 

출처 : 프로그래머스

 

풀이 방법
X, Y 각 배열에 숫자별 갯수를 카운팅한다
내림차순을 위해 배열을 역순으로 순회하며 중복된 갯수인 만큼 이어붙인다.
"00" 과 같은 케이스에 대한 예외처리를 진행한다.

 

내 코드(JAVA)

 

public  String solution(String X, String Y) {
    StringBuilder answer = new StringBuilder();
    int[] xArr = new int[10];
    int[] yArr = new int[10];

    // 문자열 안 문자 갯수 카운팅 | "0012" -> [2, 1, 1, 0, 0, 0, 0, 0, 0, 0]
    for (char ch : X.toCharArray()) {
        xArr[ch - '0']++;
    }
    for (char ch : Y.toCharArray()) {
        yArr[ch - '0']++;
    }

    // 내림차순을 위해 역순으로 순회
    for (int i = xArr.length - 1; i >= 0; i--) {
        while (xArr[i] > 0 && yArr[i] > 0) { // 중복된 갯수만큼 문자열 이어붙이기
            answer.append(i);

            if (xArr[i] > 0) xArr[i]--; // -1 누적
            if (yArr[i] > 0) yArr[i]--; // -1 누적
        }
    }

    // 자릿수가 2자리 이상인데, 맨 앞이 0이라면 "00~~"
    if (answer.length() > 1 && answer.indexOf("0") == 0) {
        answer = new StringBuilder("0");
    }

    return answer.length() == 0 ? "-1" : answer.toString();
}

 

 

처음엔 indexOf(), deleteCharAt() 과 같은 방법으로 풀려고했다.

복잡도를 생각하자

728x90
반응형

댓글