"나는 무엇을 풀었는가" 시리즈는 이렇게 시작했습니다.

  1. 취업 준비 중 몇 번의 코딩테스트를 보며 깨달은 것이 있습니다. 바로 "기초가 중요하다"는 것입니다. 그리하여 프로그래머스 Level.0부터 차근차근 다시 풀어보려고 합니다.
  2. 단지 문제를 푸는 것보단, 왜 해당 함수를 썼는지 더 재사용이나 가독성을 높일 방법은 없는지, 그리고 해당 함수가 없다면 어떻게 풀 수 있을지와 같이 다양한 방법과 생각을 통해 사고력을 높이려고 노력합니다.
  3. 그럼 레츠 고 !

💡 배운 내용


1. Math.floor()이 없다면 ?

보통 특정 값(a, b)를 특정 값(n)으로 나눈 값이 정수인지 아닌지 알수 없을 때, Math.floor()를 사용한다. 왜냐면 특정 값(a, b)이 짝수는 홀수든 상관 없이 Math.floor()를 사용하면 정수값만 반환되기 때문이다.

const a = 10;
const b = 13;
const n = 2;

return a / n; // 5
return b / n : // 6.5
return Math.floor( a / n ); // 5
return Math.floor( b / n ); // 6

그럼 Math.floor()가 없다면 정수값을 가져올 수 없는 것일까? 여기서 주목해야할 특징이 있다. 바로 홀수를 짝수로 나눈 나머지 값은 모두 x.5라는 것이다.

return 7 / 2 : // 3.5
return 13 / 2 : // 6.5
return 15 / 2 : // 7.5

따라서 특정 값이 홀수인지 짝수인지를 판단해 홀수라면 최종 값에 -0.5를 해준다. 그럼 Math.floor()를 사용하지 않아도 동일한 값을 얻을 수 있다.

 // k가 홀수라면 -0.5 
  if (k % 2 === 1) {
    return k / 2 - 0.5;
  } else {
    k / 2;
  }

✏️ 풀이


1. [프로그래머스] 나누어 떨어지는 숫자 배열

문제설명 : array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.

입/출력 :

console.log(solution([5, 9, 7, 10], 5)); // [5, 10]

Solution1

function solution(arr, divisor) {
  const divisorArr = arr.filter((v) => v % divisor === 0).sort((a, b) => a - b);

  return divisorArr.length > 0 ? divisorArr : [-1];
}

2. [프로그래머스] 서울에서 김서방 찾기

문제설명 : seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요.

입/출력 :

console.log(solution(["Jane", "Kim"])); // "김서방은 1에 있다"

Solution1

function solution(seoul) {
  return `김서방은 ${seoul.indexOf('Kim')}에 있다`;
}

3. [프로그래머스] 콜라츠 추측

입/출력 :

console.log(solution(6)); // 8

Solution1

function toEven(n) {
  return n / 2;
}

function toOdd(n) {
  return n * 3 + 1;
}

function solution(n) {
  let count = 0;

  while (n !== 1) {
    if (n % 2 === 0) {
      n = toEven(n);
    } else {
      n = toOdd(n);
    }
    count++;
  }

  return count < 500 ? count : -1;
}

4. [프로그래머스] 하샤드 수

문제설명 : 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

입/출력 :

console.log(solution(10)); // true

Solution1

function solution(x) {
  const sumN = Array.from(String(x))
    .map(Number)
    .reduce((a, b) => a + b);
  
  return x % sumN === 0;
}

5. [프로그래머스] 핸드폰 번호 가리기

문제설명 : 화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

입/출력 :

console.log(solution("01033334444")); // "*******4444"
console.log(solution("027778888")); // 	"*****8888"

Solution1 : substring 활용하기

function solution(phone_number) {
  const e = phone_number.length - 4;
  const lastN = phone_number.substring(e, e + 4);
  const changeN = [...phone_number.substring(0, e)]
    .map((v) => "*")
    .join("");

  return changeN.concat(lastN);
}

Solution2 : fill 활용하기

function solution(phone_number) {
  const e = phone_number.length - 4;
  return [...phone_number].fill("*", 0, e).join("");
}

6. [프로그래머스] 가운데 글자 가져오기

문제설명 : 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

입/출력 :

console.log(solution("abcde")); // "c"

Solution1

function solution(s) {
  const e = s.length;
  if (e % 2 === 1) {
    return s[e / 2 - 0.5];
  } else {
    return s[e / 2 - 1] + s[e / 2];
  }
}

Solution2

function solution(s) {
  const middle = s.length / 2;
  if (s.length % 2 === 1) {
    return s[middle - 0.5];
  } else {
    return s[middle - 1] + s[middle];
  }
}

7. [프로그래머스] 같은 숫자는 싫어

문제설명 : 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

입/출력 :

console.log(solution([1, 1, 3, 3, 0, 1, 1])); // [1,3,0,1]

Solution1

function solution(arr) {
  return arr.filter((v, i) => v !== arr[i - 1]);
}

8. [프로그래머스] 내적

문제설명 : 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

입/출력 :

console.log(solution([1, 2, 3, 4], [-3, -1, 0, 2])); // 3

Solution1

function solution(a, b) {
  return a.map((v, i) => v * b[i]).reduce((a, b) => a + b);
}

9. [프로그래머스] 수박수박수박수박수박수?

문제설명 : 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요.

입/출력 :

console.log(solution(3)); // "수박수"

Solution1

function solution(n) {
  let answer = "";
  for (let i = 0; i < n; i++) {
    answer += i % 2 === 0 ? "수" : "박";
  }
  return answer;
}

10. [프로그래머스] 없는 숫자 더하기

문제설명 : numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

입/출력 :

console.log(solution([1, 2, 3, 4, 6, 7, 8, 0])); // 14

Solution1

function solution(numbers) {
  const n = [1, 2, 3, 4, 5, 6, 7, 8, 9];
  return n
    .map((v) => !numbers.includes(v) ? v : -1)
    .filter((v) => v >= 0)
    .reduce((a, b) => a + b);
}
profile
한입 크기로 베어먹는 개발지식 🍰

0개의 댓글