https://school.programmers.co.kr/learn/courses/30/lessons/12985
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 처음 라운드에서 A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자와 몇 번째 라운드에서 만나는지 return - 주어진 자료는 무엇인가?
- 게임 참가자 수 N, 참가자 번호 A, 경쟁자 번호 B
- A번 참가자와 B번 참가자는 서로 붙게 되기 전까지 항상 이긴다
- 게임은 최종 한 명이 남을 때까지 진행 - 조건은 무엇인가?
- 게임은 최종 한 명이 남을 때까지 진행
- N : 21 이상 220 이하인 자연수
- A, B : N 이하인 자연수
2. 계획
- a와 b를 계속 반으로 나누면서 count+1을 해준다.
- a와 b가 같아질때 count 값 리턴
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (n, a, b) => {
let count = 0;
while (a !== b) {
a = Math.floor((a + 1) / 2);
b = Math.floor((b + 1) / 2);
count++;
}
return count;
};
test('', () => {
expect(solution(8, 4, 7)).toEqual(3);
});
4. 반성
- Math.floor()대신에 Math.ceil을 사용하면 Math.ceil(a/2)로 나타낼 수 있다.
const solution = (n, a, b) => {
let count = 0;
while (a !== b) {
a = Math.ceil(a / 2);
b = Math.ceil(b / 2);
count++;
}
return count;
};
- 재귀로 풀 수 있다.
const solution = (n, a, b, count = 0) => {
if (a === b) {
return count;
}
return solution(n, Math.ceil(a / 2), Math.ceil(b / 2), count += 1)
}
'코테연습' 카테고리의 다른 글
159. 캐시 Javascript (0) | 2022.09.19 |
---|---|
158. 점프와 순간 이동 Javascript (0) | 2022.09.18 |
156. 행렬의 덧셈 Javascript (0) | 2022.09.18 |
155. 핸드폰 번호 가리기 Javascript (0) | 2022.09.18 |
154. 하샤드수 Javascript (0) | 2022.09.18 |
댓글