알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm
JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS
React 강의 듣기
https://github.com/hoinlee-moi/React_prac
프로그래밍 생각을 굳히고 있었는지 좀 더 다양하게 생각 할 수 있도록 하자
알고리즘 문제 난이도가 높아지면서 점점 흔들리는데 할 수 있다.
한 곳에만 집중한 채 해결보다 가끔 한번 멀리 돌아서 가본다고 생각하면 그게 지름길일 수도 있다.
오늘 알고리즘
숫자 짝궁
2개의 정수가 주어지고 거기서 서로 짝궁인 정수들을 모아야 함으로 처음에는 replace를 이용해 한쪽에서 쭉 검사하여 검사할 때마다 그 숫자는 사라지도록 했었다.
하지만 테스트케이스는 통과 됐을지 언정 실제 제출해선 꽤 많은 실패를 만나 오류가 뭐지 생각하려다 다른 사람의 해석에서 힌트를 얻을 수 있었다.
분명 다 아는 내용인데 생각하지 못한 게 너무 삭제시켜서 없엔다란 의미에 몰두해서 같다.
코드를 맹신하는 것은 프로그래머에게 안좋은 습관일 수 있다.
맹신하지 말고 다방면으로 볼 수 있도록 하자.
const solution = (X, Y) =>{
let answer=""
X = X.split("")
Y = Y.split("")
for(let i = 0 ; i < 10 ; i ++) {
const sameX = X.filter(a => Number(a) === i).length
const sameY = Y.filter(a => Number(a) === i).length
answer+=String(i).repeat(Math.min(sameX, sameY))
}
if(answer === '') return "-1"
if(Number(answer) === 0) return "0"
return answer.split("").sort((a,b) => Number(b)-Number(a)).join("")
}
X
,Y
를 split
으로 배열화 시킨다.for
를 이용해 0~9까지의 숫자가 각 정수 X
,Y
에서 몇번씩 등장하는지 체크한다.filter
를 통해 각 X
,Y
에서 몇번씩 등장하는지 length
로 넣고 이중 작은 값을 answer
에 repeat
을 이용해 length
만큼 반복하여 집어 넣는다length
만큼 반복해야 짝궁이 된 수만 넣을 수 있다.answer
에 들어가지 않는다.Number
로 바꿨을 때(모두가 0일 경우 문자열은 "00000"으로 나오지만 숫자는 앞의 0을 삭제한 뒤 0만 출력된다.) "0"을 출력answer
를 배열화 시켜 sort
로 정렬한 뒤 가장 큰수가 되도록 만든 뒤 join
하여 문자열로 return
한다