⚡문제정보
두 수의 교집합을 찾아내고 -> 교집합으로 만들 수 있는 가장 큰수의 조합을 만든다.
목적 자체는 심플한데 구현하는게 살짝 아쉬웠습니다.
뭔가 더 효율적인 방법이 있을것도 같은데... 싶은?
숫자가 중복으로 주어질수도 있기 때문에 이를 처리하기 위해서 저는 Map 자료구조를 이용해서
각 숫자가 몇번 등장했는지를 체크해주는 식으로 문제를 풀었습니다.
🔍접근방법
1. X, Y 두수의 0부터 9까지의 등장횟수를 각각 카운트해서 Map에 저장해준다.
2. 등장횟수가 낮은 것을 기준으로 숫자를 모은다.
3. 내림차순으로 정렬하면 가장 큰 수가 될테니 모은 숫자를 정렬해준다.
🔍나의 풀이
function solution(X, Y) {
function objmaker(string) {
let result = new Map()
for(i=0 ; i<string.length ; i++) {
result.set(string[i], (result.get(string[i]) || 0) + 1);
}
return result
}
let first = objmaker(X)
let second = objmaker(Y)
let answer = ''
for(i=0; i<10 ; i++) {
if(first.has(String(i)) && second.has(String(i)) ) {
first.get(String(i)) <= second.get(String(i)) ? answer += String(i).repeat(first.get(String(i)))
: answer += String(i).repeat(second.get(String(i)))
}
}
if(!answer) return "-1"
else if(answer.split('').filter(ele => ele != '0').length == 0 ) return "0"
return answer.split('').sort((a,b) => b-a).join('')
}
어쩌다보니 엄청 긴 삼항연산자를 만들어버리게 되었는데 value값을 변수로 지정해줬으면
좀 더 가독성이 좋지않았을까 싶네요
코드 설명은 다음과 같습니다
function solution(X, Y) {
function objmaker(string) {
let result = new Map()
for(i=0 ; i<string.length ; i++) {
result.set(string[i], (result.get(string[i]) || 0) + 1);
}
return result
}
// 0~9까지 숫자의 등장횟수를 카운팅해주는 함수
let first = objmaker(X)
// X를 위 함수에 넣은 결과를 변수로 저장
let second = objmaker(Y)
// Y를 위 함수에 넣은 결과를 변수로 저장
let answer = ''
// 정답을 반환할 변수를 선언
for(i=0; i<10 ; i++) {
// 숫자는 0~9까지있으니까 for문은 10번만 돌리면 됨.
if(first.has(String(i)) && second.has(String(i)) ){
// 만약 first,second 둘다 i를 키로 갖고있다면 i는 X,Y에 공통으로 등장하는것
first.get(String(i)) <= second.get(String(i)) ? answer += String(i).repeat(first.get(String(i))) :
answer += String(i).repeat(second.get(String(i)))
//두 키의 밸류 중 낮은 밸류를 기준으로 answer에 i를 repeat해주기
}
}
if(!answer) return "-1"
//answer.length가 0이면 "-1" 반환
else if(answer.split('').filter(ele => ele != '0').length == 0 ) return "0"
//answer에 0밖에없으면 "0"반환
return answer.split('').sort((a,b) => b-a).join('')
//if케이스가 아닌 경우 내림차순으로 정렬해서 리턴
}
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 0] 다항식 구하기 Javascript (0) | 2022.12.15 |
---|---|
[Programmers Level 1] 신고 결과 받기 Javascript (0) | 2022.12.14 |
[Programmers Level 0] OX 퀴즈 Javascript (0) | 2022.12.14 |
[Programmers Level 1] 푸드파이트 대회 Javascript (0) | 2022.12.14 |
[Programmers Level 1] 명예의 전당 Javascript (0) | 2022.12.14 |