[자바스크립트/javascript] 프로그래머스 : 코딩테스트 입문 56~60문제

56. k의 개수

https://school.programmers.co.kr/learn/courses/30/lessons/120887?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(i, j, k) {
    let answer = ''
    for (i; i<=j; i++) {
        if (i.toString().includes(k)) {
          answer += i.toString().split('').filter(num => num==k)
        }
    }
    return answer.split(',').join('').length
}

어거지로 풀었다..

function solution(i, j, k) {
    let a ='';
    for(i;i<=j;i++){
        a += i;
    }

    return a.split(k).length-1;
}

간단하다.. 그냥 다 추가하고 k로 나눠주고 -1 하면 되나 보다

 

 

 

 

57. 진료 순서 정하기

https://school.programmers.co.kr/learn/courses/30/lessons/120835?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(emergency) {
    let ans = []
    let array = [...emergency];
    emergency.sort((a,b)=>a-b).reverse()
    
    for (i of array) {
        ans.push(emergency.indexOf(i)+1) 
    }
    
    return ans;
}

다른 풀이

function solution(emergency) {
    let array = [...emergency].sort((a,b)=>b-a);
    return emergency.map(num => array.indexOf(num)+1)
}

이런 식으로 풀 수도 있다..

 

 

 

 

 

58. 한 번만 등장한 문자

https://school.programmers.co.kr/learn/courses/30/lessons/120896

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(s) {
    let ans = []
    ss = [...new Set(s)].sort()
    for (i of ss) {
        s = s.replace(i,"")
        if (!s.includes(i)) {
            ans.push(i)
        }
    }
    return ans.join('');
}

다른 사람풀이

function solution(s) {
    let res = [];
    for (let c of s) if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c);
    return res.sort().join('');
}

lastIndexOf()라는 함수는 처음 본다ㅠ 이  함수를 알고 있었더라면 더 쉽게 풀었을 듯

lastIndexOf(): 마지막 요소의 위치를 알려줌

 

 

 

 

 

59. 숨어있는 숫자의 덧셈(2)

https://school.programmers.co.kr/learn/courses/30/lessons/120864

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(my_string) {
    al = "abcdefghijklmnopqrstuvwxyz"
    number = "123456789"
    test = 0
    my_string = my_string.toLowerCase()
    
    for (i of [...al]) {
        my_string = my_string.split(i).join()
    }
    for (i of [...number]) {
        if (my_string.includes(i)) test += 1
    }
    if (test === 0) return test
    
    my_string = my_string.split(",")
    my_string = my_string.filter(num => parseInt(num)).reduce((a,c) => Number(a)+Number(c))
    return parseInt(my_string)

ㅋㅋ..길다

 

다른 사람 풀이

function solution(my_string) {
  return my_string.split(/\D+/).reduce((acc, cur) => acc + Number(cur), 0);
}

\D+ 이 무슨 의미지? 밑에 [a-z]와 같은 의미인가

function solution(my_string) {
    return my_string.toLowerCase().replace(/[a-z]/g, " ").split(" ").map((v) => v*1).reduce((a,b) => a+b)
}

 

 

 

 

60. 이진수 더하기

https://school.programmers.co.kr/learn/courses/30/lessons/120885?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(bin1, bin2) {
    let bin = ''
    let num = parseInt(bin1,2) + parseInt(bin2,2)
    
    while (num >= 2) {
        if (num % 2 === 0) {
            bin += "0"
            num = parseInt(num/2)
        } else {
            bin += "1"
            num = parseInt(num/2)
        }
    }
    bin += num.toString()
    
    return [...bin].reverse().join('')
}

뭔가 더 간편하게 풀 수 있는 이진수 관련 함수가 있을까 검색해 봤는데 나의 구글링 한계인지 마땅한 게 나오지 않아 parseInt(n,2)만 활용하였는데

function solution(bin1, bin2) {
    return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2)
}

toString(2)을 하는 방법이 있었다..

기억해 놔야겠다!

comment