Algorithm JS | 프로그래머스 코딩테스트_개미 군단

앙두·2023년 3월 22일
0

Algorithm

목록 보기
2/17

📑 문제

  • 장군개미 공격력: 5 / 병정개미 공격력: 3 / 일개미 공격력: 1
  • hp 는 number type
  • hp 숫자에 맞게 최소한의 개미 수가 반환돼야 함

🤓 나의 풀이

function solution(hp) {
  let bossAnt = Math.floor(hp / 5)

  return Math.floor(hp % 5 === 0 ? bossAnt :
                    (hp % 5) % 3 === 0 ? bossAnt + ((hp % 5) / 3) :
                    bossAnt + ((hp % 5) / 3) + ((hp % 5) % 3))
}
  • 인수로 들어올 hp를 먼저 5로 나눠준다.
  • 나눴을 때에 소수점이 생길 수도 있으니, Math.floor 로 내림을 해주어 정수로 만들어 bossAnt에 할당시킨다. (최소한의 개미수만 반환해야 하기때문에!)
  • hp를 장군개미 공격력(5)로 나눴을 때, 나머지가 0이면(=딱 떨어지면) 몫만 반환시킨다.
  • 그러나 5로 나눈 나머지가 0이 아닐 때는, 5로 나눈 나머지 숫자를 병정개미 공격력(3)으로 또 나눈다.
  • 나머지 숫자를 3으로 나누었을 때 딱 떨어진다면(=나머지가 없다면), hp를 5로 나눈 몫 + hp를 5로 나눈 나머지를 3으로 나눈 몫 으로 반환시킨다.
  • 그러나 5로 나눈 나머지 값을 3으로 나눈 나머지가 0이 아니라면,
  • hp를 5로 나눈 몫 + hp를 5로 나눈 나머지를 3으로 나눈 몫 + hp를 5로 나눈 나머지를 3으로 나눈 나머지 를 반환시킨다.
  • 마지막으로, 5로 나눈 나머지를 3으로 나눌 때, 몫에 소수점이 붙을 수 있으므로, 전체값의 소수점을 없애주기 위해, Math.floor 함수로 내림을 해준다. (최소한의 개미수만 반환해야 하기때문에!)

나는 조건문을 사용하였다.
근데 추후 다른분들의 풀이를 보니...
사실 조건문을 사용하지 않아도 됐었음...
어차피 딱 떨어지면 0이기 때문에...
조건문 없이 다 더해줘도 괜찮았음
내 풀이.. 가독성 지못미 😶‍🌫️


👍🏻 제일 간단한 풀이 (다른 사람들의 풀이 참고)

function solution(hp) {
  return Math.floor(hp/5)+Math.floor((hp%5)/3)+(hp%5)%3
}

위에 말했던 것처럼, 조건문 사용없이 코딩한 것!
어차피 나머지가 0이면 거기에 나누기 3을 하던 뭘하던 0이기 때문에 더해도 오류가 없다.
간결 그 잡채~

구럼 오늘도 알고리즘풀이 done ! ✨

profile
쓸모있는 기술자

0개의 댓글