머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
제한사항
- 2 < numbers의 길이 < 100
- 0 < k < 1,000
- numbers의 첫 번째와 마지막 번호는 실제로 바로 옆에 있습니다.
- numbers는 1부터 시작하며 번호는 순서대로 올라갑니다.
입출력 예numberskresult
[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일 테스트 케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.
<설계>
+2씩 증가
numbers[0]에서 시작 k만큼 계속 2 더해줌
마지막 전, 마지막 사람은 각각 0번째 , 1번째 요소에 공을 줘야함.
if(마지막 전, 마지막 요소일 경우)
arr1.push()
배열길이 - 마지막 전 요소 위치 = 0
4 - 2 - 2 = 0
6 - 4 - 2 = 0
0 1 2(배열의 최소 길이는 3)
3 - 1 - 2 = 0
0 2 1 0 2 1
5 - 3 - 2 = 0
7 - 5 - 2 = 0
배열길이 - 마지막 요소 위치 = 1
3 - 2 = 1
0 1 2 3 4 5
6 - 5 = 1
k는 arr1 배열 길이 갯수로 구해야 겟는걸?
<작성 답안>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
function solution(numbers, k) {
let arr1 = [];
let more = 0;
for(let i=0; i<=k; i++){
// 공 만져본 사람 수(맨 첫사람도 포함해서 0순번이 1번째 사람.)
arr1.push(numbers[0]+i*2) // 2씩 증가
console.log(arr1)
if(i*2 == numbers.length-2){
// 마지막 전 사람일 경우 앞으로 순회시키기(0에서 시작)
k = 2
}else if(numbers.length-1 == 2*i){
// 1에서 다시 시작
arr1.push(8)
}
}
}
|
cs |
아래처럼 다시 맨 처음 칸으로 되돌리는게 안된다.
력값 〉 | [1, 2, 3, 4], 2 |
기댓값 〉 | 3 |
실행 결과 〉 | 실행한 결괏값 undefined가 기댓값 3과 다릅니다. |
출력 〉 | [ 1 ] [ 1, 3 ] [ 1, 3, 5 ] |
테스트 2 | |
입력값 〉 | [1, 2, 3, 4, 5, 6], 5 |
기댓값 〉 | 3 |
실행 결과 〉 | 실행한 결괏값 undefined가 기댓값 3과 다릅니다. |
출력 〉 | [ 1 ] [ 1, 3 ] [ 1, 3, 5 ] |
테스트 3 | |
입력값 〉 | [1, 2, 3], 3 |
기댓값 〉 | 2 |
실행 결과 〉 | 실행한 결괏값 undefined가 기댓값 2과 다릅니다. |
출력 〉 | [ 1 ] [ 1, 3 ] [ 1, 3, 8, 5 ] [ 1, 3, 8, 5, 7 ] |
<정답>
function solution(numbers, k) {
return numbers[(k - 1) * 2 % numbers.length];
}
//x번째로 던져진 지점이 아니라 던진 사람이기 때문에 k - 1을 해주고, 한 사람씩 건너뛰므로 2를 곱해준 값을 배열의 크기로 나눈 index
후기
그저 배열의 위치만을 구하면 되는 문제여서 어떻게 하면 배열의 위치값을 움직여서 값을 구할 지 다들 연구했더라.
나도 내가 원하는 방식말고, 좀 더 결과만 가볍게 구해낼 수 있도록 설계를 더 고민해봐야겠다.
'🗃️javascript > 프로그래머스' 카테고리의 다른 글
문자열 다루기 기본[Lv.1] (0) | 2023.03.16 |
---|---|
7의 개수(Lv.0)[filter((x) => 조건) 조건에 맞는 요소의 배열을 출력] (0) | 2023.03.11 |
소인수분해(Lv.0)[] (0) | 2023.03.10 |
이진수 더하기(Lv.0)[parseInt()로 진수 변환하기 ,Math.pow()로 제곱] (0) | 2023.03.09 |
숨어있는 숫자의 덧셈 (2)(Lv.0)[isNaN()과 변수 초기화] (0) | 2023.03.09 |