TIL 20221204 - 152번

hoin_lee·2022년 12월 4일
0

TIL

목록 보기
117/236

오늘 공부

알고리즘 문제 풀기(프로그래머스)
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,Ysplit으로 배열화 시킨다.
  • 이후 숫자 짝궁의 각 수는 0~9까지의 정수중 하나이니 반복문 for를 이용해 0~9까지의 숫자가 각 정수 X,Y에서 몇번씩 등장하는지 체크한다.
  • filter를 통해 각 X,Y에서 몇번씩 등장하는지 length로 넣고 이중 작은 값을 answerrepeat을 이용해 length만큼 반복하여 집어 넣는다
  • 이유는 두 정수에 모두 존재할 때 각 숫자는 한번씩만 짝궁이 됨으로 작은 length만큼 반복해야 짝궁이 된 수만 넣을 수 있다.
    EX) "1234555"와 "5567890" 이 있을 때 5는 각각 3번 2번 나온다.
    이때 5가 2번 짝궁을 이루어 1번의 5는 혼자가 되니 짝궁이 되지 않는다 고로 작은 수인 2가 5의 짝궁이 되는 횟수이고 짝궁이 안된다면 하나는 0일테니 answer에 들어가지 않는다.
  • 이후 짝궁이 되는 수가 없으면(빈 문자열) "-1"을 리턴하고
  • Number로 바꿨을 때(모두가 0일 경우 문자열은 "00000"으로 나오지만 숫자는 앞의 0을 삭제한 뒤 0만 출력된다.) "0"을 출력
  • 마지막으로 answer를 배열화 시켜 sort로 정렬한 뒤 가장 큰수가 되도록 만든 뒤 join하여 문자열로 return한다
profile
https://mo-i-programmers.tistory.com/

0개의 댓글