ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 - 추억점수
    Algorithm 2023. 4. 27. 18:47

    문제

     

    풀이

    풀고자 했던 의도는 받은 2차원 photo 배열의 각 배열의 요소들이 name 배열의 요소와 일치하는지 확인, 일치한다면 해당 name 배열의 index값들을 가져와 yearning 배열에서 가져온 index들에 일치하는 값들의 합을 answer배열에 하나씩 대입하는 것이었다.

    의도대로 하드코딩을 해본 결과 답은 나왔지만 심히 지저분해서 화가 나지 않을 수가 없는 코드다.

    지저분한 코드 줄이기 작업을 해보자...

    photo 배열의 요소를 name 배열의 요소와 비교해 얻은 인덱스값을 yearning 배열에 대입해 값을 뽑아내는게 키포인트다.

    reduce와 indexOf 함수를 이용해 photoArray의 요소를 name과 비교하고 그 결과값을 yearning에 바로 대입해주었다.

    주목할 포인트는 'yearning[name.indexOf(cur)] ?? 0' 구문인데, 원래 하드코딩으로 구현한 코드에서는 photoArray의 요소와 name 배열의 요소 비교시 일치하지 않아 undefined로 return 된 결과값을 제거해주기 위해 filter(data => data !== undefined) 를 사용한 구문이 있다.

    ?? 문법을 사용하게 되면 이를 쉽게 해결할 수 있는데, 이 연산자는 nullish coalescing operator로 '??' 연산자 왼쪽의 피연산자가 'null' 또는 'undefined'인 경우 오른쪽 피연산자를, 아니라면 왼쪽 피연산자를 반환한다.

    즉, 'yearning[name.indexOf(cur)] ?? 0' 구문은 photoArray 요소가 name 배열에 있다면 그 인덱스값을 yearning 배열에 대입해 값을 반환하고, 없다면 0을 반환해서 acc 에 더한다는 구문이 된다.

Designed by Tistory.