본문 바로가기
[ 다먹살 ]/- Coding

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

by 엉망으로살기 2022. 10. 18.
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/131128?language=java 

 

프로그래머스

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

programmers.co.kr

 

내 생각에 이 문제는 문자열 처리를 조금만 할 수 있으면 해결할 수 있는 문제같다. 구현 부분까지는 굉장히 쉬웠으나 의외로 결과값을 더하는 부분에서 시간초과가 발생하여 StringBuilder를 사용하지 않으면 약 5개 정도의 테스트 케이스가 시간초과가 난다.

 

1. 각 입력값 X, Y에 대해 0~9까지 몇 개씩 있는 지를 valuex, valuey에 각각 저장한다. (이 때 ASCII코드를 활용한다.)

2. 공통적으로 가지고 있는 값들(=해당 인덱스가 0이 아닐 때)에 대해서만 체크를 하며, 두 배열값 중 더 작은 수만큼 반복문을 사용해 결과값에 더해준다.

  2-1. 이 때, 최대값을 만들어줘야하기 때문에 배열의 끝인 9부터 0까지 역순으로 탐색하면 자동으로 최대값을 구할 수 있다.

3. 결과값은 3개의 케이스로 나누어서 리턴한다.

  3-1. 공통인 수가 없을 때 : 무조건 -1을 리턴

  3-2. 공통인 수가 있지만 0만 있을 때(=맨 앞글자가 0일때) : 무조건 0을 리턴

     => 9부터 0까지 내림차순으로 탐색을 했기 때문에 맨 앞이 0이면 무조건 0이다.

  3-3. 0이 아닌 짝꿍 수가 있을 때 : StringBuilder를 이용해 append한 결과값을 리턴


문제 및 입출력


코드

import java.util.TreeMap;

class Solution
{
    public String solution(String X, String Y)
    {
        StringBuilder sb = new StringBuilder();
        boolean change = false;
        int[] valuex = new int[10];
        int[] valuey = new int[10];
        
        for(int i=0; i<X.length(); i++)
        {
            valuex[(int)X.charAt(i)-'0']++;
        }
        for(int i=0; i<Y.length(); i++)
        {
            valuey[(int)Y.charAt(i)-'0']++;
        }
        for(int i=valuex.length-1; i>=0; i--)
        {
            int cnt = 0;
            int num = 0;
            
            if(valuex[i]!=0 && valuey[i]!=0)
            {
                cnt = Math.min(valuex[i], valuey[i]);
                num = valuex[i];
                
                for(int j=0; j<cnt; j++)
                {
                    sb.append(i);
                }
                
                change = true;
            }
        }
        if(!change)
        {
            return "-1";
        }
        else if(sb.toString().charAt(0)=='0')
        {
            return "0";
        }
        else
        {
            return sb.toString();
        }
    }
}

 

반응형

댓글