본문 바로가기
프론트엔드로 가는 길/프로그래머스

34. 프로그래머스_공던지기

by woody-j 2023. 2. 4.

코딩일지

작성자
  최주희 작성일자 2022.02.03
세부 코딩 내용  
활동 기간 2022.02.03
문제 머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
나의 풀이   function solution(numbers, k) {
let numberOrder=k*2-2;
    let ArrayOrder=numberOrder % numbers.length
    if(numbers.length < numberOrder){
      return numbers[ArrayOrder];
    }
return numbers[numberOrder] 
}
결과   통과
다른 풀이 function solution(numbers, k) {
    return numbers[(--k*2)%numbers.length];
}
const solution = (numbers, k) => 
numbers[(k * 2 - 1) % numbers.length - 1]
해석   증감 연산자를 사용하면 이렇게 반복해서 -1를 할 필요가 없다.
키워드 코딩내용 생각
  1. 필요한 조건 정리


  • 친구들의 번호가 들어있는 정수 배열
  • k번째로 공을 던지는 사람
  • 정수 배열의 인덱스






2. 풀이단계 정리


  • k에 *2-2하면 공을 던지는 사람의 순서가 나온다.
  • 배열보다 인덱스의 수가 큰 경우를 생각해서 공을 던지는 사람의 순서와 배열의 나머지를 구한다.
  • 배열보다 큰 경우엔 인덱스를 ArrayOrder로 대입하고
  • 배열보다 작은 경우에는 numberOrder를 대입해서 출력
내가 쓴 식은 k*2-2 이다.
생각해보니 2(k-1)로 그렇다면 증감연산자를 이용할 수 있다는 것을 알 수 있었다. 이것은 알면서도 새로 알게된 신박한 방법이다. 그리고 생각해보니.. numbers.length < numberOrder 아닌 경우에도 그냥 나머지를 구하면 고대로 값이 나와서 if문으로 안나눠도 되겠구나…깊은 깨달음
 
 
 
 
 
 
 
 
 

문제주소

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

 

프로그래머스

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

programmers.co.kr