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

★ from(), includes(), toString(), replace()

 

 

31. 중앙값 구하기

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

 

프로그래머스

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

programmers.co.kr

function solution(array) {
    return array.sort((a,b)=>a-b)[parseInt(array.length/2)]
}

 

 

 

32. 배열의 유사도 (feat. 교집합, includes)

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

 

프로그래머스

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

programmers.co.kr

function solution(s1, s2) {
    s1 = s1.filter(word => s2.includes(word))
    return s1.length;
}

이 문제를 풀기 위해서 includes 함수를 알아야 했다

 

function solution(s1, s2) {
    s1 = s1.filter(word => word in s2)
    return s1;
}

위처럼 파이썬과 비슷한 방식(in)이 통하나 시도해 봤는데 역시 안 됐다..

includes 기억해 두자.

 

*참고로 합집합 구하는 법 (출처 https://blog.naver.com/youngchanmm/221911458872)

let arrA = [1, 4, 3, 2];
let arrB = [5, 2, 6, 7, 1];
[...new Set([...arrA, ...arrB])]; // returns [1, 4, 3, 2, 5, 6, 7]

 

 

 

33. 옷가게 할인받기

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

 

프로그래머스

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

programmers.co.kr

function solution(price) {
    return price >= 500000 ? parseInt(price * 0.8) : price >= 300000 ? parseInt(price * 0.9) : price >= 100000 ? parseInt(price * 0.95) : price
}

삼항연산자 썼는데 너무 길어서 코드가 더러운 것 같다

 

 

 

 

34. 순서쌍의 개수

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

 

프로그래머스

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

programmers.co.kr

function solution(n) {
    cnt = 0;
    for (i = 1; i <= n; i++) {
        if (n % i === 0) {
            cnt += 1;
        }
    }
    return cnt;
}

 

 

 

35. 문자열 안에 문자열

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

 

프로그래머스

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

programmers.co.kr

(1) split이용한 방법

function solution(str1, str2) {
    return str1.split(str2).length > 1 ? 1 : 2
}

(2) includes 이용한 방법

function solution(str1, str2) {
    return str1.includes(str2) ? 1 : 2;
}

 

 

 

36. 자릿수 더하기

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

 

프로그래머스

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

programmers.co.kr

분명 문자열로 변경하는 게 string이 맞았는데 왜 안되나 했는데 첫 글자가 대문자였다..

"S"tring이다

function solution(n) {
    n = String(n)
    result = 0
    for (i = 0; i < n.length; i++) {
        result += parseInt(n[i])
    }
    return result;
}

다른 풀이

function solution(n) {
  return n
    .toString()
    .split("")
    .reduce((acc, cur) => acc + Number(cur), 0);
}

toString(), split(), reduce() 이용해서 풀 수도 있다.

 

 

 

37. 제곱수 판별하기

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

 

프로그래머스

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

programmers.co.kr

function solution(n) {
    return n**0.5 % 1 === 0 ? 1 : 2;
}

**0.5 하면 루트 씌운 값이 나온다는 걸 알면 쉽게 구할 수 이따

 

 

 

38. 개미군단

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

 

프로그래머스

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

programmers.co.kr

function solution(hp) {
    return parseInt(hp / 5) + parseInt((hp % 5) / 3) + ((hp % 5) % 3) / 1
}

 

 

 

39. 모음 제거

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

 

프로그래머스

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

programmers.co.kr

function solution(my_string) {
    del = [/a/g,/e/g,/i/g,/o/g,/u/g]
    for (i of del) {
        my_string = my_string.replace(i,"")
    }
    
    return my_string;
}

파이썬에서 replace() 함수는 모든 문자가 새로운 문자로 치환됐지만,

자바스크립트에서의 replace는 제일 처음에 오는 문자만 치환되었다.

그래서 모든 문자를 치환시키는 방법을 찾아봤는데,

치환시키고 싶은 문자를 슬래시(/)로 감싸고 뒤에 g를 붙이면 된다. ex: string.replace(/a/g, "A")

 

훨씬 간단한 방법

function solution(my_string) {
    return my_string.replace(/[aeiou]/g, '');
}

나처럼 일일이 리스트를 새로 만들지 않고 한번에 [aeiou]를 만들고 //g를 해주면 되나 보다.

 

 

filter와 includes를 이용한 풀이

function solution(my_string) {
    return Array.from(my_string).filter(t => !['a', 'e', 'i', 'o', 'u'].includes(t)).join('');
}

t가 배열 안에 포함되어있지 않으면 조인

(Array from 관련 링크 🔗)

from()은 배열에 사용하는 메소드로 대상이 되는 값을 배열로 변환해 주는 매우 유용한 메소드입니다. 

라고 한다.

 

 

40. 숨어있는 숫자의 덧셈(1)

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

 

프로그래머스

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

programmers.co.kr

function solution(my_string) {
    my_string = my_string.split("")
    result = 0
    for (i of my_string) {
        if (parseInt(i)) {
            result += parseInt(i)
        }
    }
    return result;
}

다른 사람들은 reduce나 filter, map 등 이용해서 풀었는데 나는 아직 사용법을 제대로 못 익혀서 이용하기 어렵다

좀 더 공부해야겠다

comment