programmers

[Programmers Level 0] 공던지기 Javascript

냠냠맨 2022. 11. 30. 18:04

문제정보

 

 

머쓱이가 공던지기 게임을 하고있다는 설정입니다. 

바로 옆으로 던지면 시시하니까 한명을 건너뛰고서만 공을 던질 수 있군요!

 

즉 사람이 1,2,3,4 이렇게 서있으면 1번녀석은 3번에게 던지고 3번은 다시 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번

2번째로 공을 던진 사람은 3번이니까

k가 2일때 result는 3이군요

 

 


 

나의풀이

 

function solution(numbers, k) {
    let answer = k*4 - 2
    while(answer >= numbers.length) {
        answer = answer - (numbers.length-1)
    }
    return answer
}

 

처음 발상은 이랬습니다.

k*4 - 2 를 하면 답이 나오지 않나??

하지만 실제로 실행시켜보니 개같이 멸망

 

function solution(numbers, k) {
    let counter = 1
    for(i=1 ; i < k; i++) {
        counter = counter + 2
        if(counter >= numbers.length) {
            counter = counter - numbers.length
        }
    }
    return counter
}

 

그래서 그냥 for문으로 문제를 풀었습니다.

무조건 1번부터 공을 던지니까 counter의 초기값을 1로 정해주고 2씩 늘려주면서

counter가 length보다 커지면 length만큼 빼줬습니다.

 

근데 아무리 생각해도 맨 처음 생각해낸 풀이법을 적용할 수 있을 것 같아서

머리를 굴려봤는데

 

function solution(numbers, k) {
    let answer = 1 + k*2 - 2
    while(answer >= numbers.length) {
        answer = answer - (numbers.length)
    }
    return answer
}

 

1번부터 시작하니까 1로 시작하고 k*2만큼 순번이 돌아가니까 k*2

그리고 맨처음 공 던진 케이스는 1번이니까 1번몫 -2를 빼주고

answer 가 length보다 작거나 같아질때까지 length를 뺴주면 답이 나올것이다!

 

라고 생각했습니다. 이건 되네요

 


 

다른사람의 풀이

 

function solution(numbers, k) {
    return numbers[(--k*2)%numbers.length];
}

 

굳이 번거롭게 하나씩 뺄 필요도 없이 걍 나머지를 구하면 됐는데 멍청하다 그죠

 

반응형