728x90
https://school.programmers.co.kr/learn/courses/30/lessons/147354
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제를 풀기 위해서 크게 3단계 과정이 필요하다.
- 주어진 data 정렬하기
- row_begin ~ row_end 사이 행의 튜플을 각 행의 인덱스로 나눠 그 나머지 값을 더한다.
- 각 행 누적값을 xor 연산으로 더한다.
첫번째 과정을 구현한 함수가 sortData이다.
문제에서 주어진 방법대로 col번째 컬럼 기준으로 오름차순하고,
만약 값이 같을 경우에는 key값인 첫번째 컬럼 기준으로 내림차순을 해 정렬해준다.
두번째 과정을 위해 row_begin ~ row_end 사이의 행만 추리기 위해 slice 내장함수를 사용했다.
그리고 각 행마다 행의 인덱스로 나머지값을 구해 누적하는 값을 구해준게 result이다.
마지막 과정으로 result 리스트의 값을 xor 연산을 해줬다. 그게 (a ^ b) 이다.
구현한 코드는 아래와 같다. 👇👇👇
function solution(data, col, row_begin, row_end) {
const sortedData = sortData(data,col-1);
const sliceData = sortedData.slice(row_begin-1,row_end);
const result = sliceData.map((tp,i)=>
tp.reduce((ac,cur)=> (cur%(row_begin+i)) + ac ,0)
)
return result.reduce((ac,cur)=> ac ^ cur , 0);
}
function sortData(data, targetCol){
return data.sort((a,b)=> {
if(a[targetCol] === b[targetCol]){
return b[0]- a[0];
}
return a[targetCol] - b[targetCol];
})
}
728x90
'STUDY > 알고리즘' 카테고리의 다른 글
[프로그래머스] 당구 연습 (javascript) (1) | 2023.09.10 |
---|---|
[프로그래머스] 무인도 여행 (javascript) (0) | 2023.09.08 |
[프로그래머스] 개인정보 수집 유효기간 (javascript) (0) | 2023.09.03 |