ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알고리즘 공던지기
    카테고리 없음 2023. 4. 17. 23:44

    문제 설명

    머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.


    제한사항

    • 2 < numbers의 길이 < 100
    • 0 < k < 1,000
    • numbers의 첫 번째와 마지막 번호는 실제로 바로 옆에 있습니다.
    • numbers는 1부터 시작하며 번호는 순서대로 올라갑니다.

    입출력 예

    numbers k result

    [1, 2, 3, 4] 2 3
    [1, 2, 3, 4, 5, 6] 5 3
    [1, 2, 3] 3 2

    입출력 예 설명

    입출력 예 #1

    • 1번은 첫 번째로 3번에게 공을 던집니다.
    • 3번은 두 번째로 1번에게 공을 던집니다.

    입출력 예 #2

    • 1번은 첫 번째로 3번에게 공을 던집니다.
    • 3번은 두 번째로 5번에게 공을 던집니다.
    • 5번은 세 번째로 1번에게 공을 던집니다.
    • 1번은 네 번째로 3번에게 공을 던집니다.
    • 3번은 다섯 번째로 5번에게 공을 던집니다.

    입출력 예 #3

    • 1번은 첫 번째로 3번에게 공을 던집니다.
    • 3번은 두 번째로 2번에게 공을 던집니다.
    • 2번은 세 번째로 1번에게 공을 던집니다.

    ※ 공지 - 2023년 1월 25일 테스트 케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.


    이문제는 처음에 너무 어렵게 생각해서 배열을 끝까지 돌았을때 어떻게 인덱스를 앞부분으로 돌리지? 에서 문제에서부터 막혔다.

    그래서 이전에 종훈님이 알려주신 index % array.length로 풀어야하나 고민이 많았다.

     

    function solution(numbers, k) {
      let index = 0
      for (let i = 0; i < k - 1; i++) {
        index += 2
    
        if (numbers.length < index) {
          index = index - numbers.length
        }
      }
    
      return numbers[index];
    }
    
    console.log(solution([1, 2, 3, 4, 5, 6], 5))

    그러다가 index를 숫자로두고 포문을 돌때마다 +2씩 추가되게 하고서 콘솔에 1차적으로 찍어봤을때 2,4,6,8이렇게 나오는데

    저걸 인덱스라고생각하면 첫번째 인자는 배열의 길이가 총 5까지이기때문에 6일 경우 배열의 0번째 인덱스 1이나와야하고 8일때는 2번째 인덱스 3이 나와야지 결과값이 잘 나온다. 

    그러려면 

    6 => 1

    8 => 1 이라고 봤을때 

     

    현재까지의 index가 배열의 길이를 넘었을때를 조건문으로 주고 현재 index값에서 배열의 길이를 빼주면 원하는 값이 나온다. 

     

    알고리즘은 알다가도 모르겠다 증말로다가 

Designed by Tistory.