프로그래머스 코딩 테스트 연습 문제 Lv.0 JS - 5문제(인덱스 바꾸기, 영어가 싫어요, 대문자와 소문자, 암호 해독, 369게임)

찐새·2023년 4월 6일
0

코딩테스트

목록 보기
25/53
post-thumbnail

인덱스 바꾸기

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

function solution(my_string, num1, num2) {
  return (
    my_string.slice(0, num1) +
    my_string[num2] +
    my_string.slice(num1 + 1, num2) +
    my_string[num1] +
    my_string.slice(num2 + 1)
  );
}
  • JS는 문자열 속 글자를 직접 바꾸지 못하기에 필요한 부분을 slice하여 이어 붙임.
  • but, 배열 내 요소는 변경이 가능했다...!
function solution(my_string, num1, num2) {
  const arr = my_string.split("");
  [arr[num1], arr[num2]] = [arr[num2], arr[num1]];
  return arr.join("");
}

영어가 싫어요

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

function solution(number) {
  const answer = number
    .replaceAll(/zero/g, 0)
    .replaceAll(/one/g, 1)
    .replaceAll(/two/g, 2)
    .replaceAll(/three/g, 3)
    .replaceAll(/four/g, 4)
    .replaceAll(/five/g, 5)
    .replaceAll(/six/g, 6)
    .replaceAll(/seven/g, 7)
    .replaceAll(/eight/g, 8)
    .replaceAll(/nine/g, 9);
  return Number(answer);
}
  • 무식한 방법으로 해결했다.
  • 다른 사람 풀이를 보니, replace 두 번째 인자로 콜백을 줘서 해결하거나 reduce에서 인덱스로 해결하더라.
// replace 콜백 이용
const obj = {
        zero: 0, one: 1, two: 2, three: 3, four: 4,
        five: 5, six: 6, seven: 7, eight: 8, nine: 9
    };
const num = numbers.replace(/zero|one|two|three|four|five|six|seven|eight|nine/g,
               (v) => obj[v]);

// reduce 인덱스 이용
['zero','one','two','three','four','five','six','seven','eight','nine']
  .reduce((t,s,i)=>t.replaceAll(s,i),n)

대문자와 소문자

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

function solution(my_string) {
  let answer = "";
  for (let i = 0; i < my_string.length; i++) {
    if (my_string[i] === my_string[i].toLowerCase()) {
      answer += my_string[i].toUpperCase();
    } else {
      answer += my_string[i].toLowerCase();
    }
  }
  return answer;
}
  • 문자열 요소가 소문자면 대문자로, 대문자면 소문자로 변환.
  • for...of 쓰거나 배열로 변환 후 map 등을 사용했어도 되었을 듯.
  • 변수['함수명']() 해도 함수가 실행됨을 배움. 이런 것도 있구나.

암호 해독

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

function solution(cipher, code) {
  return cipher.split("").filter((v,i)=>(i+1) % code === 0).join("")
}
  • cipher의 인덱스 + 1이 code와 나눠 떨어지는 것만 남기고 join한다.

369게임

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

function solution(order) {
  return String(order).match(/3|6|9/g) ? String(order).match(/3|6|9/g).length : 0;
}
  • 정규식을 통과하면 길이를 반환, 아니라면 0 반환.
profile
프론트엔드 개발자가 되고 싶다

0개의 댓글