Javascript - 프로그래머스 19일차

이율곡·2023년 6월 29일

Programmers

목록 보기
19/44
post-thumbnail

19일차

19일차는 96%를 달성했다. 남은 건 4문제. 물론 이것으로 끝이 아니고 앞으로 해야 할 것들이 더 많지만 뿌듯함이 다가온다. 20일, 4주라는 기간 동안 꾸준히 해 왔으니 포기하지말고 더 해보자는 생각으로 19일차를 했다.


오늘의 문제

전국 대회 선발 고사

0번부터 n - 1번까지 n명의 학생 중 3명을 선발하는 전국 대회 선발 고사를 보았습니다. 등수가 높은 3명을 선발해야 하지만, 개인 사정으로 전국 대회에 참여하지 못하는 학생들이 있어 참여가 가능한 학생 중 등수가 높은 3명을 선발하기로 했습니다.

각 학생들의 선발 고사 등수를 담은 정수 배열 rank와 전국 대회 참여 가능 여부가 담긴 boolean 배열 attendance가 매개변수로 주어집니다. 전국 대회에 선발된 학생 번호들을 등수가 높은 순서대로 각각 a, b, c번이라고 할 때 10000 × a + 100 × b + c를 return 하는 solution 함수를 작성해 주세요.

입출력 예

rankattendanceresult
[3, 7, 2, 5, 4, 6, 1][false, true, true, true, true, false, false]20403
[1, 2, 3][true, true, true]102
[6, 1, 5, 2, 3, 4][true, false, true, false, false, true]50200

이 문제가 기초 단계를 마무리하게 해주는 느낌이 들었다. 코딩의 기초 단계를 탄탄히 마무리 하기 위해 오늘의 문제로 선택했다.

접근방법

이 문제에서는 전국 대회에 참여 가능한 학생들 중에서 등수가 높은 3명을 선발하고, 그들의 학생 번호를 특정한 방식으로 조합하는 것을 요구한다. 그렇기 때문에 분석적인 사고가 중요하다. 이에 따라 문제를 분석하면,

  1. 학생 정보 통합: 우선 각 학생의 등수와 전국 대회 참여 가능 여부, 그리고 학생 번호(인덱스)를 한 데 모으기 위해 rank 배열과 attendance 배열을 조합하여 새로운 객체 배열을 만듦.
  2. 참여 가능 학생 필터링: 이어서, 전국 대회에 참여 가능한 학생들만을 걸러내는 작업을 수행.
  3. 등수에 따른 정렬: 출석 가능한 학생들을 등수에 따라 정렬.
  4. 학생 번호 계산: 정렬된 학생 중에서 상위 3명의 학생 번호를 가져와서 결과값을 계산.

풀이

function solution(rank, attendance) {
    const students = rank
        .map((r, idx) => ({ rank: r, idx, attend: attendance[idx] }))
        .filter(s => s.attend)
        .sort((a, b) => a.rank - b.rank);
        
    return students[0].idx * 10000 + students[1].idx * 100 + students[2].idx;
}

문제를 풀이하면 메서드를 주목해서 볼 필요가 있다.

첫 번째는 map이다. map 메서드 안에서 각 요소와 그에 해당하는 인덱스를 객체로 만들었다. 이 객체는

  1. rank 속성(학생의 등수)
  2. idx 속성(학생의 번호)
  3. attend 속성(학생의 출석 여부)

를 가지게 된다.

다음은 filter 메서드를 사용해서 attend 속성이 true인 학생만 필터링을 한다.

마지막으로 sort 메서드로 가장 높은 순위부터 오름차순으로 정렬했다. 그래서 1등부터 정렬이 된다. 그러면 마지막으로 문제에서 원하는대로 결과 값을 반환하면 된다.


정리하기

ES6 문법을 활용해서 문제를 풀었다. 매번 문제를 풀면서 느끼지만, 분석적인 사고를 기르는 것이 중요하다. 그렇게 함으로써 수학적인 사고가 부족할지라도 문제 자체에도 접근이 가능하기 때문이다. 더 나은 개발자가 되기 위해서는 분석적인 사고와 수학적인 사고 능력을 육성해야겠다.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

0개의 댓글