Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- App Runner
- 프로그래머스
- react-query
- 프로세스
- 프로젝트캠프
- typescript
- 타입스크립트
- React.js
- 인사이드아웃
- html
- 스나이퍼팩토리
- BFS
- Algorithm
- 개발자부트캠프
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- 자바스크립트
- ip
- 알고리즘
- react
- 메모리
- javascript
- 웅진씽크빅
- cs #네트워크
- 해시
- 유데미
- IT개발캠프
- 리액트
- 네트워크
- 스레드
- CS
Archives
- Today
- Total
Bin's Blog
[프로그래머스] Level2 - 테이블 해시 함수(Javascript) 본문
728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📝 문제 요약
1️⃣ 테이블은 2차원 행렬로 표현 열은 컬럼, 행은 튜플, 첫 번째 컬럼은 기본키로서 모든 튜플에 대해 그 값이 중복되지 않는다.
2️⃣ col번째 컬럼의 값을 기준으로 오름차순 정렬을 하되 만약 그 값이 동일시 PK기준으로 내림차순 정렬을 한다.
3️⃣ 정렬된 데이터 S_i를 i번째 행의 튜플에 대해 각 컬럼의 값을 i로 나눈 나머지들의 합으로 정의한다.
4️⃣ row_begin <= i <= row_end인 S_i를 누적하여 bitwise XOR한 값을 해시 값으로서 반환한다.
✅ 정답 코드
function solution(data, col, row_begin, row_end) {
let answer = 0;
let temp = [];
let acc = 0;
// col-1번째 값을 기준으로 정렬하되, 두개가 같으면 기본키의 값을 기준으로 정렬한다.
const sorted_data = data.sort((a, b) => a[col-1] - b[col-1] || b[0] - a[0])
// data의 모든 요소에서
for (let i = 0; i< data.length; i++) {
// 반드시 다음 행으로 갈 때 누적값은 초기화 해줘야 한다.
acc = 0;
for (let j = 0; j < data[0].length; j++) {
// S_i를 i번째 행의 튜플에 대해 각 컬럼의 값을 i로 나눈 나머지들의 합으로 정의한다.
acc += (sorted_data[i][j] % (i+1))
}
temp.push(acc);
}
// slice로 row_begin <= i <= row_end인 값들 구하기
let scope_value = temp.slice(row_begin-1, row_end);
// 범위에 해당하는 모든 S_i를 누적하여 bitwise XOR 한 값을 해시 값으로서 반환한다.
answer = scope_value.reduce((acc, val) => acc ^ val, 0);
return answer
}
🖨️ 실행결과

📔느낀점
👉 처음에 다음 행을 지날때 값을 초기화를 시키지 않아서 틀렸었다.
👉 문제의 요구사항을 준수하면서 문제를 해결했다.
👉 다중 조건 정렬, slice로 범위 구하기, reduce로 범위의 값들을 XOR하기 이런 것들이 핵심이다.
👉 메서드를 적재적소에 쓰는 법을 익히는 것이 중요한 거 같다.
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스] Level2 - 혼자 놀기의 달인(Javascript) (0) | 2023.08.23 |
---|---|
[프로그래머스] Level2 - 미로 탈출(Javascript) (0) | 2023.08.22 |
[프로그래머스] Level2 - 시소 짝꿍(Javascript) (0) | 2023.08.18 |
[프로그래머스] Level1 - 달리기 경주(Javascript) (0) | 2023.08.17 |
[프로그래머스] Level2 - 숫자 카드 나누기(Javascript) (0) | 2023.06.12 |