본문 바로가기
코테연습

157. 예상 대진표 Javascript

by hxunz 2022. 9. 18.

https://school.programmers.co.kr/learn/courses/30/lessons/12985

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
     - 처음 라운드에서 A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자와 몇 번째 라운드에서 만나는지 return 
  • 주어진 자료는 무엇인가?
     - 게임 참가자 수 N, 참가자 번호 A, 경쟁자 번호 B
     - A번 참가자와 B번 참가자는 서로 붙게 되기 전까지 항상 이긴다
     - 게임은 최종 한 명이 남을 때까지 진행
  • 조건은 무엇인가?
     - 게임은 최종 한 명이 남을 때까지 진행
     - N : 21 이상 220 이하인 자연수
     - A, B : N 이하인 자연수

2. 계획

  1. a와 b를 계속 반으로 나누면서 count+1을 해준다.
  2. 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

댓글