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];
}
굳이 번거롭게 하나씩 뺄 필요도 없이 걍 나머지를 구하면 됐는데 멍청하다 그죠
반응형