JavaScript - 프로그래머스 레벨 : 0(6) - ORDER BY '정답률'

먹보·2022년 11월 14일
0

1. 인덱스 바꾸기

문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성

function solution(my_string, num1, num2) {
  const str = [...my_string];

  [str[num1], str[num2]] = [str[num2], str[num1]];

  return str.join('');
}

🗒️코멘트 : NULL

2. 숫자 찾기

정수 num과 k가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성

function solution(num, k) {
    if (num.toString().indexOf(k) >= 0){
        return num.toString().indexOf(k) + 1
    } else {return -1 }
}

🗒️코멘트 : NULL

3. 배열 회전시키기

정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성

function solution(numbers, direction) {
    if (direction === 'right'){
        numbers.unshift(numbers.pop());
      return numbers
    } else { 
      numbers.push(numbers.shift());
      return numbers
    }
}

🗒️코멘트 : popshift같은 개념은 배열을 재정립해주는 것이 아닌 그에 해당하는 값을 반환한다는 것을 기억하자.

4. 암호해독

군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.

암호화된 문자열 cipher를 주고받습니다.
그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성

function solution(cipher, code) {
    var answer = '';
    let decoded = [];
  let i = 0;
    let cipherArr = cipher.split("");
  do{
    let index = (code-1)+(code*i)
    decoded.push(cipherArr[index]);
        i++;
  }
    while (i < cipherArr.length){
  answer = decoded.join("");
  return answer;
  }
}

🗒️코멘트 : 코드는 목적에 맞게 작동이 되나 "i"값이 올바른 결과를 출력한 뒤에도 돌기 때문에 효율성은 떨어지기에 while부분의 조건을 조금 조정해 줄 필요가 있으나 지금 당장 떠오르는 아이디어가 없고 시간관게상 생각해보고 다음에 추가할 계획이이다.

5. 최대값 만들기

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성

//실패한 풀이법
function solution(numbers) {
    var answer = 0;
    let multiples = [];
    for (let i = 0 ; i<numbers.length ; i++){
        for (let j = 0 ; j<numbers.length ; j++){
          if (numbers[i] !== numbers[j]){
           multiples.push(numbers[i]*numbers[j]) 
          }
        }
    }
    answer = Math.max(...multiples)
    return answer;
}

//원인 파악 및 성공.
function solution(numbers) {
    let sortNum = numbers.sort((a,b) => b-a);
    return Math.max(sortNum[0]*sortNum[1],sortNum[sortNum.length-1]*sortNum[sortNum.length-2])
}

🗒️코멘트 : 확실히 나는 FOR문에 중독된게 맞는 것 같다...이렇게 쉬운 문제를 도대체 왜 FOR문을 사용해 풀려고 했는지..처음에는 습관처럼이중 for문을 작성해서 풀어보려고했으나 계속 특정 테스트 출력에 실패해서 원인 파악을 해보니 같은 숫자가 중복될 가능성을 배제해버렸다..그래서 FOR문외 방법으로 풀어보려고 생각을 해봤는데...아니나 다를까..내가 너무 어렵게 생각해서 가장 근본적인 접근 방식을 잊었다. 곱을 가장 크게 만드려면 정수부분에 있어서는 절대값이 가장 큰 두 수를 곱하면 될 것을...그래서 다시 절댓값 까지는 아니지만 근본적인 접근을 허용하여 풀어버렸다.

📌총평 :

오늘부터 클론코딩 프로젝트에 들어가는 터라 공부해야할 양이 증가되어 10문제씩 푸는 것은 무리일 것 같아 5문제로 줄여서 진행하도록하자. 프로젝트 시기에 체력 조정은 필수!

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글