프로그래머스/1단계
숫자 짝꿍
아메바개발
2022. 11. 3. 00:32
https://school.programmers.co.kr/learn/courses/30/lessons/131128
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
X와 Y의 값을 split으로 나누고 이값을 list에 넣은 후 한개씩 비교하여 있는지여부 판단한 후 answerList에 넣는것으로 하였다.. 하지만 테스트 11~15의경우 시간 초과가 나게되었는데 상당히 시간제한이 짧은듯하다.. StringBuilder도 써보고 해봤으나 안되서 다른사람의 코드를 참조하였다. counting sort방식처럼 0~9 배열에 넣어놓고 9부터 순서대로 꺼내는 방식으로 구현하였다.
첫 코드
import java.util.*;
class Solution {
public String solution(String X, String Y) {
String answer = "";
List<String> xList = new ArrayList<>(Arrays.asList(X.split("")));
List<String> yList = new ArrayList<>(Arrays.asList(Y.split("")));
List<String> answerList;
if(xList.size()<yList.size()){
answerList=getAnswer(xList,yList);
}else{
answerList=getAnswer(yList,xList);
}
Collections.sort(answerList,Collections.reverseOrder());
answer =String.join("",answerList);
if(answer.equals("")){
return "-1";
}
if(answer.startsWith("0")){
return "0";
}
return answer;
}
public List<String> getAnswer(List<String> list1,List<String> list2){
List<String> answerList= new ArrayList<>();
for(long i=0;i<list1.size();i++){
if(list2.indexOf(list1.get((int)i)) != -1){
answerList.add(list1.get((int)i));
list2.remove(list2.indexOf(list1.get((int)i)));
}
}
return answerList;
}
}
answer = answerList
.stream()
.map(String::valueOf)
.collect(Collectors.joining());
다른사람 풀이보고 한것
import java.util.*;
class Solution {
public String solution(String X, String Y) {
int[] arrX = new int[10];
int[] arrY = new int[10];
insert(arrX,X);
insert(arrY,Y);
String answer = getString(arrX,arrY);
if (answer.equals("")) {
return "-1";
} else if (answer.startsWith("0")) {
return "0";
}
return answer;
}
public void insert(int[] arrX,String X){
Arrays.stream(X.split(""))
.map(Integer::parseInt)
.forEach( x -> arrX[x]++);
}
public String getString(int[] arrX,int[] arrY){
StringBuilder answer = new StringBuilder();
for(int i=9; i>=0;i--){
while (arrX[i] >= 1 && arrY[i] >= 1) {
arrX[i]--;
arrY[i]--;
answer.append(i);
}
}
return answer.toString();
}
}
스터디원 풀이
class Solution {
public String solution(String x, String y) {
StringBuffer answer = new StringBuffer("");
char[] xArr = x.toCharArray();
char[] yArr = y.toCharArray();
Arrays.sort(xArr);
Arrays.sort(yArr);
int xIdx = 0;
int yIdx = 0;
while (xIdx < xArr.length && yIdx < yArr.length) {
if (xArr[xIdx] == yArr[yIdx]) {
answer.append(String.valueOf(xArr[xIdx]));
xIdx++;
yIdx++;
} else if (xArr[xIdx] < yArr[yIdx]) {
xIdx++;
} else if (xArr[xIdx] > yArr[yIdx]) {
yIdx++;
}
}
if (answer.length() < 1) return "-1";
answer.reverse();
String result = answer.toString();
if (!result.contains("1") && !result.contains("2") && !result.contains("3") &&
!result.contains("4") && !result.contains("5") && !result.contains("6") &&
!result.contains("7") && !result.contains("8") && !result.contains("9")) {
return "0";
}
return result;
// return String.valueOf(Long.parseLong(result));
}
}
class Solution {
public String solution(String X, String Y) {
Map<Character, Integer> xMap = new HashMap<>();
Map<Character, Integer> yMap = new HashMap<>();
for(char c : X.toCharArray()) {
Character key = Character.valueOf(c);
if(xMap.containsKey(key)) {
xMap.replace(key, xMap.get(key) + 1);
} else {
xMap.put(key, 1);
}
}
for(char c : Y.toCharArray()) {
Character key = Character.valueOf(c);
if(yMap.containsKey(key)) {
yMap.replace(key, yMap.get(key) + 1);
} else {
yMap.put(key, 1);
}
}
StringBuffer answer = new StringBuffer();
List<Character> keyList = new ArrayList<>(xMap.keySet());
keyList.sort((k1, k2) -> k2.compareTo(k1));
for(Character k : keyList) {
if(yMap.containsKey(k)) {
int count = 0;
if(xMap.get(k) >= yMap.get(k)) {
count = yMap.get(k);
} else {
count = xMap.get(k);
}
for(int i = 0; i < count; i++) {
answer.append(k);
}
}
}
if(answer.length() == 0) {
return "-1";
} else {
return answer.toString().replaceAll("0", "").length() == 0 ? "0" : answer.toString();
}
}
}