sungyup's.

Web_Miscellaneous / Algorithm(JS) / 4.6 프로그래머스 Lv.0 #51~60

4.6프로그래머스 Lv.0 #51~60

프로그래머스 Lv.0 51~60번

개요

기초 트레이닝 문제(Lv.0) 51 ~ 60번 문제 풀이 중 배울 점이 있는 풀이들에서 배운 개념들을 내 것으로 만들고자 정리해본다.

52. 배열 만들기 1

[배열 만들기 1]은 아주 단순한 문제로, 다른 사람의 풀이에서

javascript
function solution(n, k) { const answer = []; for(let i = 1; i <= n ;i++) if(i % k === 0) answer.push(i) return answer; }

52-1. 수학적 사고

javascript
function solution(n, k) { const answer = []; for(let i = k ; i <= n; i+=k){ answer.push(i) } return answer; }

52-2. ~~

아래 풀이는 좋은 풀이라고 생각하진 않지만, 더블 틸데(~~) syntax가 익숙하지 않아 이번 기회에 복습하고자 가져왔다. ~~소수점을 버리는 연산자로, 아래 풀이에선 Math.floor(n / k)와 같은 역할이다. ~비트연산자 NOT이기 때문에, ~x-(x + 1)이 되고 이를 두 번 연속으로 하면 x의 정수 부분이 되는 것이다. 즉, ~~는 부동 소수점을 정수로 빠르게 변환하게 된다.

javascript
const solution= (n, k) => Array(~~(n / k)).fill(k).map((v, i)=>v * (i + 1))

53. 글자 지우기

글자 지우기는 더 좋은 풀이가 있는걸 알면서도 이렇게 풀었다.

javascript
function solution(my_string, indices) { let answer = '' for(let i = 0; i < my_string.length; i++){ if(!indices.includes(i)){ answer += my_string[i]; } } return answer; }

53-1. filter로 한줄 풀이

javascript
const solution=(s,d)=>[...s].filter((v,i)=>!d.includes(i)).join('')

55. 가까운 1 찾기

가까운 1 찾기는 배열(0과 1로 구성)과 idx가 주어졌을때, idx 이상인 순서에서 1인 가장 작은 인덱스를 반환하라는 문제다. 나는 이렇게 풀었다:

javascript
function solution(arr, idx) { for(let i = idx; i< arr.length; i++){ if(arr[i] === 1){ return i; } } return -1; }

54-1. indexOf

Array.prototype.indexOf()arr.indexOf(searchElement, fromIndex)의 문법으로 쓰인다. 따라서 이 문제에서 한방에 쓸 수 있는 것.

javascript
const solution=(a,i)=>a.indexOf(1,i);

59. 2의 영역

2의 영역은 첫 2부터 마지막 2까지를 자른 배열을 반환하라는 문제다. 나는 이렇게 모든 2의 인덱스를 모은 배열을 만들고, 예외처리 후 slice로 배열을 잘라 반환했다.

javascript
function solution(arr) { const indexList = []; for(let i = 0; i < arr.length; i++){ arr[i] === 2 && indexList.push(i) } if(indexList.length === 1) return [2]; if(indexList.length === 0) return [-1]; return arr.slice(indexList[0], indexList[indexList.length - 1] + 1) }

59-1. lastIndexOf

lastIndexOf라는 메소드가 있었다(..) 이 메소드를 사용해서 금방 풀 수 있다.

javascript
function solution(arr) { const from = arr.indexOf(2); const end = arr.lastIndexOf(2); return from === -1 ? [-1] : arr.slice(from, end+1); }

59-2. 이중 포인터

이 문제는 이중 포인터의 대표적인 예이다. 아래와 같이 왼쪽, 오른쪽의 인덱스를 살짝씩 수정하며 풀 수 있다.

javascript
function solution(arr) { if (!arr.includes(2)) return [-1]; let left = 0, right = arr.length - 1; while (arr[left] !== 2) left++; while (arr[right] !== 2) right--; return arr.slice(left, right + 1); }