728x90
728x90
연속된 수열에서 부분 수열의 합이 원하는 값을 충족하는 경우가 있는지 확인하는 문제였다. 당연히 이중 for문을 사용하면 문제를 해결할 수 있지만, 정답은 아닐 것이라고 생각했다. 문제 조건에 합을 만족해도, 여러 경우의 수가 있다면 가장 짧은 부분수열을 구해야 했기에 큰 수부터 더해가는 접근법을 생각했다. function solution(sequence, k) { let start = sequence.length - 1; let end = sequence.length - 1; let sum = sequence[start]; while(start > 0) { if(sum === k) { break; } else if(sum > k) { sum -= sequence[end]; end--; } else { ..
이번 문제는 탐욕법 알고리즘 문제로, 가장 피로도를 적게 사용하여 광물을 캐는 경우를 찾아야 한다. 광물은 순서대로 캐야하고, 순서를 바꿀 수 있는건 사용하는 곡갱이의 종류였다. 나는 이 문제를 해결하기 위해서 다음과 같은 방법을 생각했다. 1. 광물은 순서대로 캐야하므로, 순서대로 5개씩 묶어 생각한다. (하나의 곡갱이로 5개의 광물을 캔다) 2. 곡갱이 수 * 5 개의 광물만 고려한다. 3. 5개씩 묶은 광물들을 다이아몬드, 철, 돌의 개수에 따라 정렬한다. 4. 광물이 정렬되었으므로, 이제 다이아몬드 곡갱이부터 순서대로 사용하여 피로도를 계산한다. // picksTired 순서대로 다이아, 철, 돌 곡갱이의 각 광물을 캐는데 필요한 피로도 const picksTired = [{ "diamond": ..
붓을 이용하여 덧칠을 하는데, 최소한의 붓질만으로 덧칠을 하는 컨셉의 문제이다. function solution(n, m, section) { const check = (arr) => { let response = 0; while(arr.length > 0) { let start = arr.shift(); response++; while(arr[0] < start + m) { arr.shift(); } } return response; } return check(section); } 문제를 해결하기 위해서 생각해낸 컨셉은 앞의 덧칠이 필요한 부분을 시작으로 붓의 길이만큼을 고려하여, 덧칠을 한 뒤 다음 덧칠이 필요한 부분을 찾아 같은 로직을 반복하는 것 이었다. 사실, 이 로직만으로는 문제가 해결이 되지..
드래그를 하여 모든 파일을 선택할 수 있는 최소 영역을 구하는 문제였다. function solution(wallpaper) { let startX, startY, endX, endY; for(let i = 0; i i) { startX = i; } if(startY === undefined) { startY = j; } else if(startY > j) { startY = j; } if(endX === undefin..
틱택토라고 하였지만, 내 생각엔 영락없는 빙고였다. 만약 3x3으로 제한되지 않았다면 더 어려운 문제가 되었을 것 같았다. 여러 조건을 파악하고 반례를 찾는 게 핵심인 문제였다고 생각한다. const check = (board, char) => { let count = 0; for(let i = 0; i < 3; i++) { if(board[i][0] === char && board[i][1] === char && board[i][2] === char) { count++; } } for(let i = 0; i < 3; i++) { if(board[0][i] === char && board[1][i] === char && board[2][i] === char) { count++; } } // cross i..
이번 문제는 해결은 어렵지 않았으나, 처음 봤을 때 문제를 이해하기가 어려웠다. function solution(keymap, targets) { const answer = []; const keyMapObj = {}; keymap.forEach(el => { for(let i = 0; i i + 1) { keyMapObj[el[i]] = i + 1; } } }); for(let i = 0; i < targets.length; i++) { let count = 0; for(j of targets[i]) { if(!keyMapObj[j]) { count = -1; break; } count +=..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.