Skip to content

2주차 풀이 업데이트#8

Open
bebiangel wants to merge 1 commit intomainfrom
jeus_02
Open

2주차 풀이 업데이트#8
bebiangel wants to merge 1 commit intomainfrom
jeus_02

Conversation

@bebiangel
Copy link
Copy Markdown
Collaborator

Summary

  1. 이진탐색으로 접근
  2. 무적권 존재하지 않을때 까지 사용 후 남은 적 수 계산
  3. 무적권 갯수가 남으면서 적이 남아있는 경우 왼쪽 포인터를 +1 로 옮김
  4. 그렇지 않으면 오른쪽 포인터를 -1로 올김
  5. mid값은 while값 때문에 새롭게 셋팅
  • 시간복잡도:
// 수도코드

고민 포인트

function solution(n, k, enemy) {
    const totalEnemyCounts = enemy.reduce((acc, cur) => acc + cur, 0);
    const averageEnemyCounts = totalEnemyCounts / enemy.length;
    let blockedRound = 0;
    let restN = n;
    let restClear = k;
    let notAnymore = false;

    for (let i = 0; i < enemy.length; i++) {
        if (notAnymore) {
            break;
        }
        if (enemy[i] >= averageEnemyCounts) {
            if(restClear === 0) {
                break;
            }
            restClear -= 1;
        } else {
            if ((restClear === 0 && restN < enemy[i])) {
                notAnymore = true;
                break;
            }
            restN -= enemy[i];
        }
        blockedRound += 1;
    }

    return blockedRound;
}
  • 첫 문제풀이는 손으로 풀면서보니 전체 적의 수를 평균값으로 내어서 계산을 해봄
  • 문제에서 노출되는 예시는 통과하지만 제출시 34점 정도로 계산됨
  • 임의로 평균값을 내는 것은 정답이 아니라는 판단
  • 이진 탐색을 통해서 하는 방식으로 변경

리뷰어 Check-list

  • 가독성이 괜찮나요?
  • 엣지케이스를 대응하였나요?

@bebiangel bebiangel self-assigned this Jul 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant