프로그래머스 3-28 TIL

Seunggyu Jung·2023년 3월 28일
0

Day10 3/4: 배열 회전시키기

Q. 정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.

내 풀이

function solution(numbers, direction) {
    return direction === "right" ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)] : [...numbers.slice(1, numbers.length), numbers[0]];
}

해설

  • 1단계. 본 문제에서 이동하는 것은 directionright면 배열의 마지막 요소만 이동하고, left인 경우 맨 앞의 요소만 이동한다는 것을 파악한다.
  • 2단계. 삼항연산자로 이동시킬 배열을 새 배열에 미리 배치시킨뒤, 남은 요소들을 slice()메서드를 이용하여 배치시킨다.
  • 3단계. 여기서 핵심은 slice()메서드 사용시, 전개구문(...arr)을 사용해야 배열이 풀린 요소들이 들어갈 수 있다는 것을 파악해야한다.

Day10 4/4: 공 던지기

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

풀이

function solution(numbers, k) {
    let cnt = 1;
    for (let i = 0; ; i += 2){
        i %= numbers.length
        const item = numbers[i];
        if (cnt == k) {
            return item;
        }
        cnt += 1;
    } 
}

해설

본 문제는 정답을 참고하여 풀이했기에, 내일 모레 풀이를 지우고 다시 풀어봐야함

  • 1단계. 문제에서 요구하는 반복 패턴은 배열의 요소가 2칸씩 앞으로 나아간다는 것이다. 다만, 반복해서 나간 패턴이 배열의 길이를 초과하는 경우, 앞으로 돌아가야 한다는 점을 파악해야한다.
  • 2단계. 여기서 패턴을 배열의 길이로 나누었을때 생기는 나머지가 그 다음으로 가야할 패턴의 순번과 같아진다는 것이 핵심이다. 그리고 이는 배열의 길이보다 작을 때도 적용가능하다.
  • 3단계. 따라서 반복문을 작성할 때, 복합 연산자인 %=를 사용하여 배열의 순번을 반복한다.
  • 4단계. 이 순환을 k번째 일때 그만 둘 것이기에 새로운 변수인 cnt를 만들어, 반복의 범위를 정하여 마무리한다.

마무리

  • 공 던지기 문제는 한달 동안 고민했던 문제였으나 복합 연산자로 간단하게 해결되었다는 것이 좀 많이 신선했다.
  • 이는 문제를 더 많이 풀 수록 늘어나는 인사이트라고 하기에, 조급할 것 없이 꾸준히 복습해나가며 풀도록 하자.
profile
감동을 주고픈 개발자(준비생)

0개의 댓글

관련 채용 정보