일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- npm
- 웹
- js
- 좋아요추가
- 리액트
- 예외처리
- 자바스크립트
- 타입스크립트
- gui
- 깃
- 데이터베이스
- 백준13549번
- API
- 자바
- 프로그래머스
- Express
- 컴퓨터공학
- post
- 백준18111번js
- 백준18111번
- 백준13549번js
- 리팩토링
- CS
- 파이프라인
- 오픈소스
- Node.js
- 객체
- 브랜치
- 깃허브
- 변수
- Today
- Total
Nevertheless
[JAVA] 숫자 짝꿍 본문
< 풀이 >
import java.util.*;
class Solution {
public String solution(String X, String Y) {
int x[]=new int[10];
int y[]=new int[10];
for(int i=0;i<X.length();i++){
int temp=X.charAt(i)-'0';
x[temp]++;
}
for(int i=0;i<Y.length();i++){
int temp=Y.charAt(i)-'0';
y[temp]++;
}
ArrayList<Integer> list=new ArrayList<>();
StringBuilder sb=new StringBuilder();
String answer = "";
for(int i=0;i<x.length;i++){
if(x[i]!=0&&y[i]!=0){
int num=Math.min(x[i],y[i]);
for(int j=0;j<num;j++){
list.add(i);
}
}
else
continue;
}
for(int i=list.size()-1;i>=0;i--){
sb.append(list.get(i));
}
answer=sb.toString();
if(answer.equals(""))
answer = "-1";
else if(answer.replace("0","") == "")
answer = "0";
return answer;
}
}
✏️ 풀이 방법
1. 각 숫자의 개수를 저장하기 위한 배열 x, y 를 생성한다. ( [0]의 값이 2라면 0이 2번 나온다는 뜻)
2. 문자열 X,Y를 구성하고 있는 숫자를 인덱스로 하여 배열 x,y의 값을 증가시킨다.
3. 두 문자열의 공통으로 나타나는 정수를 구한다.
: x[i]의 값과 y[i]의 값이 0이 아니다. => i라는 수를 포함하고 있다.
: x[i]와 y[i]의 값 중에 작은 값으로 i의 개수를 정한다. (x[i]의 값이 3이고, y[i]의 값이 2라면 i가 공통적으로 2번 나타난다는 뜻이다.)
: 해당 개수만큼 i를 list에 저장한다.
4. 가장 큰 수를 만들어야하므로 list를 뒤부터 돌아서 StringBuilder 형 변수 sb 에 값을 추가한다.
5. sb를 String 형으로 변환하여 answer에 저장한다.
: answer이 빈 문자열이면=> 공통된 정수가 없다는 뜻이므로 -1 을 저장한다.
: 공통된 정수가 0밖에 없으면=> 값을 0으로 저장
6. answer 출력
✍🏻 느낀점
이 문제는 어떻게 풀어야 할지 접근은 잘했는데, 공통된 정수가 모두 0인 경우에는 답을 0으로 해주는 부분에서 실수가 있었다. 그리고, StringBuilder 를 사용하기 전에는 시간초과도 생겼다. String 형으로 변수를 선언해주고, 값을 계속 변경해줬어야 해서 시간초과가 난 것 같다. 이러한 문제처럼 문자열의 값을 자주 변경해줘야 하는 경우에는 String 보다는 StringBuilder를 사용하도록 하고, 생각지 못한 부분에서 실수하지 않도록 생각을 좀 더 깊게 해야겠다.
'코딩테스트 > Programmers' 카테고리의 다른 글
[JAVA] 숫자 문자열과 영단어 (0) | 2024.06.14 |
---|---|
[JAVA] 이웃한 칸 (1) | 2024.06.10 |
[JAVA] 완주하지 못한 선수 (1) | 2024.06.08 |
[JAVA] 크레인 인형 뽑기 게임 (0) | 2024.06.01 |
[JAVA] 성격 유형 검사하기 (0) | 2024.06.01 |