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();
}
}
}
'[ 다먹살 ] > - Coding' 카테고리의 다른 글
[프로그래머스] 레벨2 피로도 (0) | 2022.10.19 |
---|---|
[프로그래머스] 레벨2 할인 행사 (0) | 2022.10.18 |
[프로그래머스] 레벨1 삼총사 (0) | 2022.10.18 |
[프로그래머스] 레벨1 성격 유형 검사하기 (0) | 2022.10.17 |
[백준] 1919 에너그램 만들기 (0) | 2022.10.12 |
댓글