저장을 습관화

[못풀음] 프로그래머스 LV.0 공 던지기 본문

코딩 테스트/프로그래머스 - 자바스크립트

[못풀음] 프로그래머스 LV.0 공 던지기

ctrs 2023. 9. 28. 17:39

프로그래머스 LV.0 공 던지기

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제 명

공 던지기


2. 문제 설명

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


3. 제한 사항

- 2 < numbers의 길이 < 100

- 0 < k < 1,000

- numbers의 첫 번째와 마지막 번호는 실제로 바로 옆에 있습니다.

- numbers는 1부터 시작하며 번호는 순서대로 올라갑니다.


4. 예시

numbers k result
[1, 2, 3, 4] 2 3
[1, 2, 3, 4, 5, 6] 5 3
[1, 2, 3] 3 2


5. 기본 제공 코드

function solution(numbers, k) {
    var answer = 0;
    return answer;
}


6. 제출한 내 답

//

 

6-2. VSC에 작성한 내용

//


7. 특이사항

틀렸던 코드

const solution = (numbers, k) => {
  let strings = numbers.join("");
  let arr = [];

  while (strings.length <= k * 2) {
    strings += strings;
  }

  // 현재 strings의 상황
  // 12341234 // 길이 8
  // 123456123456 // 길이 12
  // 123123123123 // 길이 12

  // 뭐라고하지?
  // 요소 2개씩, 몇개? k개
  // 그리고 반환은 arr[k-1][0]

  for (i = 0; i < strings.length; i += 2) {
    arr.push(strings[i]);
  }

  // return arr;
  return arr[k - 1];
};

// 테스트
// k는 1 이상 999 이하
console.log(solution([1, 2, 3, 4], 2));
// ["1", 2, "3", 4]
// 1번이면 충분함(4), 배열의 길이는 4, k는 2

console.log(solution([1, 2, 3, 4, 5, 6], 5));
// ["1", 2, "3", 4, "5", 6, "1", 2, "3", 4, 5, 6]
// 2번 필요함(12), 배열의 길이는 6, k는 5

console.log(solution([1, 2, 3], 3));
// ["1", 2, "3", 1, "2", 3, 1, 2, 3]
// 3번 필요함(9), 배열의 길이는 3, k는 3

// 즉 총 필요한 배열의 길이는 k*2 이상이 되어야함
// arr.length > k*2

numbers가 [1,2,3,4] 같은 경우에는 12341234로,

[1,2,3,4,5,6]의 경우에는 123456123456로 만들고

 

for 반복문을 통하여 2번째 인덱스의 수만을 가져와 배열 arr에 넣고

k-1번째 요소를 리턴하도록 하였다

 

입출력 예시는 맞는데 채점에서 14.9점 맞았다

화가 난다

문제가 무엇을 요구하는지도 헷갈리기 시작했다

 

질문탭에서 짝수 홀수로 푸는 사람들을 보았다

이 방법을 사용해보자

 

 

틀렸던 코드 2

const solution = (numbers, k) => {
  let strings = numbers.join("");
  while (strings.length <= k * 2) {
    strings += strings;
  }

  // 짝수만
  let arr = strings.split("").filter((v, i) => {
    return i % 2 === 0 ? v : false;
  });

  // 현재 strings의 상황
  // 12341234; // 길이 8
  // 123456123456; // 길이 12
  // 123123123123; // 길이 12

  // return +arr[k - 1];
  return arr;
};

// 테스트
// k는 1 이상 999 이하
// numbers의 길이는 3이상 999 이하
console.log(solution([1, 2, 3, 4], 2));
// ["1", 2, "3", 4]
// 1번이면 충분함(4), 배열의 길이는 4, k는 2

console.log(solution([1, 2, 3, 4, 5, 6], 5));
// ["1", 2, "3", 4, "5", 6, "1", 2, "3", 4, 5, 6]
// 2번 필요함(12), 배열의 길이는 6, k는 5

console.log(solution([1, 2, 3], 3));
// ["1", 2, "3", 1, "2", 3, 1, 2, 3]
// 3번 필요함(9), 배열의 길이는 3, k는 3

// 즉 총 필요한 배열의 길이는 k*2 이상이 되어야함
// arr.length > k*2

도저히 이해가 가지 않는다

죽고싶다


8. 다른 사람이 작성한 답

8-1.

//