문제 이해
N x N 행렬 board와 인형뽑는 위치 moves 리스트가 주어지고, 숫자로 표현된 인형들이 board 내부에 입력되어 있다.
moves 리스트에 적힌 인덱스 값에 따라 인형을 bucket에 넣는데, 만약 bucket에 같은 값의 인형이 있다면 인형이 제거되고 최종 answer 값이 +2가 된다.
풀면서 배운 것
for문 중첩 시, 하나의 for문을 특정조건에서 끝내는 형태로 쓸려면 break이나 continue를 해줘야 한다.
forEach 문을 써서 풀었는데, forEach 문은 break가 안된다는 것을 배웠다.
답보고 배운 것
-transpose, ||, && 연산자, reduce, map 메서드
transpose는 전치행렬이고, N x M 행렬을 M x N 으로 바꿔준 것이다.
나의 풀이
다른 사람의 풀이
1. transpose
board로 주어진 matrix를 전치시켜 문제를 뽑는 것이 인형뽑기 문제의 상황과 같으므로, board를 전치시켜준다.
[[1,1,1], [2,2,2], [3,3,3]] 의 3X3 matrix가 있다고 가정하자.
transpose 결과는 [[1,2,3], [1,2,3], [1,2,3]] 일 것이다.
reduce 메서드에서, result을 쌓이는 변수로 지정하고 row를 현재값으로 지정하였다.
map 메서드에서, '_'로 바꿀값을 지정하지 않고, 'i'로 인덱스를 지정하였다.
( [...(result[i] || []), row[i]], [] ) 뜯어보기
result[i]가 있으면 그 값을 쓰고, 없으면 빈 배열에서 ... spread operator를 쓴다. 즉 result로 쌓인 배열에 있는 값들을 나열하거나, 없으면 빈 배열에 spread operator가 적용되게 하여 빈 공백으로 만든다.
거기에 row[i] 값을 추가하여 새로운 배열을 만든다. ' ,' 뒤의 빈 배열은 reduce 메서드의 초기값이다.
reduce 메서드의 1회 실행 결과는 result = [[1], [1], [1]]이 될 것이다.
다음 회차때, result[i], 즉 맨 앞의 [1] 배열을 불러와서 ...spread operator로 나열한다. 그리고 row[i]인 '2'값을 붙인다.
즉 reduce 메서드의 2회 실행 결과는 result = [[1,2], [1,2], [1,2]]가 된다.
마지막까지 실행하면 transpose가 이루어짐을 알 수 있다.
참조
programmers.co.kr/learn/courses/30/lessons/64061
코딩테스트 연습 - 크레인 인형뽑기 게임
[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4
programmers.co.kr
'Computer Science > Algorithm' 카테고리의 다른 글
Prm 6 : Sudoku / parseInt, [...Array().keys()].slice() (0) | 2021.01.01 |
---|---|
BubbleSort (0) | 2020.12.29 |
Prm 3 : Subset (0) | 2020.12.28 |
Prm 2 : fibonacci (0) | 2020.12.27 |
Prm 1 : permutation (0) | 2020.12.25 |