Javascript - 프로그래머스 4일차

이율곡·2023년 6월 8일

Programmers

목록 보기
4/44
post-thumbnail

4일차

메서드에 대한 이해와 활용이 필요한 때⏰

매일 같은 Lv.0의 문제를 풀지만, 풀 때마다 느낌이 다르다. 첫 날 풀었을 때는 메서드에 대해 생각을 많이 해본 적이 없지만, 이제는 '어떤 메서드가 필요하겠구나.' 라는 생각은 바로바로 한다. 벌써 4일 째 밖에 되지 않았지만 Javascript에 대해 이해하고 있는 부분이 있어서 그런지 아직은 어렵지 않게 흡수를 잘 할 수 있었다.

오늘은 문제를 풀면서 이해한 메서드들을 정리하고, 문제 하나를 짚고 넘어가려 한다.


메서드

reduce()

reduce() 메서드는 배열의 요소를 순회하면서 값을 누적하는 기능을 하는 메서드이다. for문 + sum이라고 보면 될 거 같다. 활용 방식은 아래와 같다.

const numbers = [1, 2, 3, 4, 5];

const sum = numbers.reduce((acc, value) => {
  return acc + value;
}, 0);

console.log(sum); // 15

numbers 배열에 reduce() 메서드를 활용한 것이다. 하나하나 살펴보면, acc는 누적될 변수고, value는 배열의 요소를 나타내는 변수다. 그래서 value에는 배열의 요소들이 들어가고 acc에는 값이 누적된다, 그리고 reduce의 콜백함수 다음에 들어온 0은 초기값이다. 초기값이 없다면, 배열에서 첫 번째 요소가 초기값이 된다.

match()

match() 메서드는 정규표현식과 일치하는 부분을 찾아서 배열로 반환해주는 메서드다. 주로 match() 메서드는 문자열에서 특정패턴을 찾을 때 사용한다는 점을 알고 있으면 좋을 거 같다. 활용은 아래와 같다.

const str = 'Hello, World!';
const matches = str.match(/o/g);

console.log(matches);  // ['o', 'o']

상수 str에서 문자 'o'를 찾아 배열로 반환했다. 정규표현식에 관해서는 전에 작성한 포스팅이 있다.


오늘의 문제

개미군단

개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.

이 문제를 선택한 이유는 게임과 같기 때문에 선택했다. 실시간 전략 게임(RTS)와 같이 상대 체력에 딱 맞는 병사를 효율적으로 상대하기 위할 때, 문제와 같은 상황을 자주 맞이한다. 그래서 이 문제를 오늘의 문제로 선정했다.

접근방법

첫 번째로 체력이 주어졌을 때, 어떻게 병력을 나눌 건지 생각이 필요했다. 최소한의 병력으로 구성해야 하기 때문에 공격력이 큰 개미부터 구성해나갔다.

두 번째는 반복하여 남은 체력에 그 다음 공력력을 가진 병력을 추가하고 마지막으로 남은 체력에 마지막 병력을 추가했다.

코드

function solution(hp) {
    var answer = 0;
    
    const BIG = Math.floor(hp / 5);
    const MIDDLE = Math.floor((hp % 5) / 3);
    const LITTLE = (hp % 5) % 3;
    
    answer = BIG + MIDDLE + LITTLE;
    
    return answer;
}

이렇게 코드를 작성하여 최소한의 병력으로 체력을 없애는 코드를 작성했다.


정리하기

일단 주어진 문제를 해결하는 것이 코딩이지 않을까.

계속 문제를 풀면서 효율적으로 풀지 못해 창피할 때도 많다. 그러나 주어진 문제를 해결하지 못하는 것보다는 일단 해결하는 것이 더 중요하다고 생각하는 부분이 Lv.0이고. 능력을 쌓은 단계라고 생각한다.

벌써부터 완벽해지려고 할 필요 없이 꾸준히 도전하고 내 것으로 만드는 과정이 필요할 때다. 내일이면 벌써 50%다. 중간 정리를 해야겠다.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

0개의 댓글