[JavaScript][프로그래머스] - LVL.0 개미군단
정답 1
오랜만에 내 주력 언어인 JavaScript 를 사용하여 문제를 풀어보았다. 역시 고향에 돌아온 느낌(?)
해당 문제를 처음 접했을때 약간 무서웠다. 일딴 이전에 봐왔던 문제들에 비해 덩치가 컸다. 코테를 풀면서 내가 항상 느낀건 언어에 대한 이해력은 기본이고 문제에 대한 이해력이 문제의 정답률을 좌우한다는 것이다. 문제를 진중하게 읽고 그 의도를 파악하는게 매우 중요하다. 그 의도만 확실하게 파악하면 아무리 길고 복잡하게 꼬아놓은 문제라도 하드코딩을 해서라도 어떻게든 해결할 수 있다.
상기 문제는 나머지와 몫을 활용하여 풀어야 하는 문제였다. 그리하여 아래와 같이 답을 작성해 보았다.
function solution(hp) {
let totalCount= 0;
let mopHp = hp;
[5,3,1].forEach(d => {
totalCount += Math.floor(mopHp/d);
mopHp %= d;
});
return totalCount;
}
여기서 totalCount 는 필요한 개미들의 수이고 mopHp 는 사냥감의 hp 이자 공격후 남은 hp이다.
그리하여 totalCount 와 mopHp 를 따로 계산해주었다.
그리고 정예, 일반, 일꾼 개미들의 공격력을 모아 배열을 만들어주고 forEach 를 사용해 반복문을 돌렸다.
반복문 내에는 차례대로 몹의 남은 HP 와 개미들의 공격력을 차례대로 나누어주어 필요한 계급별 개미들의 수의 총합을 계산했고 아래 mopHp %= d 를 통해서 사냥감의 남은 HP 를 계속 계산해주어 totalCount 계산 로직에 제공하였다.
결과는 정답이였다.
하지만 상기 답은 너무 길다. 더 깔끔한 방법을 찾아봐야할 것 같다.
정답 2
아래 답을 보고 나머지와 몫에 대한 계산에 약간의 어려움이 있다는것을 알게 됐다. 확실히 나머지라는 개념 자체가 일반적으로 많이 사용하는 개념은 아니다 보니 계산할때 머리를 필요 이상으로 사용하게 된다. 많이 계산 연습을 하여 익숙해질 필요가 있다.
function solution(hp) {
return Math.floor(hp / 5) + Math.floor((hp % 5) / 3) + (hp % 5) % 3;
}
1. 먼저 사냥감의 HP 에서 5(정예 개미의 공격력) 을 나누어 필요한 정예 개미의 수를 구한다.
2. 두번째로 사냥감의 HP 에서 정예 개미들의 공격력만큼을 나눈 나머지 값(사냥감의 남은 HP) 에서 일반 개미의 필요 수량을 구하기 위해 그 공격력을 나눈다.
3. 그다음 일꾼 개미들의 공격력은 1이기 때문에 마지막으로 남은 수만큼 필요한 상황이 될것이다. 그래서 사냥감의 HP 에서 정예, 일반 개미들의 공격력을 나눈 후 마지막으로 남은 사냥감의 HP 를 구한다.
그렇게 1, 2, 3 번 모두 더해준다.
그럼 필요한 값이 나온다.
우아한 답은 아니지만 그래도 한줄로 떨어지면서 문제에 대한 이해도가 돋보여 맘에 들었다.