FrontEnd/프로그래머스

    [JS] 프렌즈4블럭

    마치 애니팡과 같은 게임을 구현하는 문제였다. 우선 주어진 board의 x축과 y축 위치를 바꿔줘서 빈 공간외에 떨어지는 것을 구현하기 편하도록 해주었다. 문제푸는 순서는 아래와 같다. 1. board의 x,y축 위치를 교환(전치행렬) 2. 보드와 똑같은 2차원 배열을 얕은복사를 통해서 생성 (깊은복사를 하면 복사한 의미가 없음) 3. 4칸이 뭉쳐있는 부분을 확인해 복사된 retBoard에 0으로 바꿈 ==> 그래야 7칸씩 곂쳐져 있는 부분들도 모두 감지가 가능하다. 4. pullBoard함수를 활용해서 빈칸을 모두 당긴다. 5. checkBoard함수를 활용해서 두 보드가 같으면 (없어진 블럭이 없으면) 무한반복문을 종료한다. 문제자체는 구현문제란 느낌을 받았는데 자바스크립트에서 스프레드 연산자를 단순..

    [JS] 튜플

    1. 정규표현식을 활용해서 문자열로 되어잇는 부분을 숫자로 만들어준다. 2. 길이를 조건으로 이를 정렬해준다. (1,2,3,4 길이의 리스트 순서대로 정렬해야 후에 하나씩 값을 추가하는게 가능) 3. reduce를 활용해서 배열을 추가해준다. 자바스크립트만의 장점을 느껴볼 수 있는 문제였던 것 같다. function solution(s) { return s.match(/{[0-9,]+}/g) .map(v => v.match(/[0-9]+/g) .map(v => +v)).sort((a,b) => a.length - b.length) .reduce((a,c)=>[...a , ...c.filter(v => !a.includes(v))],[] ) }

    [JS] 수식 최대화

    완전탐색과 배열을 다루는 고차함수들을 활용해서 해결했다. 1. 최대 6가지 경우의 수가 나오니 각각의 우선순위대로 계산한 후에 최대값들을 저장할 배열을 생성 2. 정규표현식을 통해서 연산자 부분과 숫자 부분을 분리 3. eval함수를 쓸까 계산함수를 만들까 고민하다가 그냥 사칙연산을 해주는 간단한 함수를 생성 4. 6가지 경우의 수를 한번씩 순회 5. 각 연산자별로 순회 (ex.*+- => * , + , - 순서대로 3번 계산) 연산자들 중에서 이번 순서에 계산할 연산자를 구한 이후, 배열에서 삭제해가면서 정리 tmpNum [ 100, 60000, 500, 20 ] operatorInfo [ 0 ] tmpNum [ 100, 60000, 520 ] operatorInfo [ 1 ] tmpNum [ -599..

    [JS] 삼각 달팽이

    삼각형을 만드는 문제였다. 2차원 배열이므로 아래 , 오른쪽 , 왼쪽 대각선 세 방향으로 배열이 뻗어나갈 수 있도록 dx와 dy를 정의해주었다. n*n 크기의 0으로 채워진 2차원 배열을 하나 생성해준 후 while문을 활용해 더이상 갈 수 없을때까지 수를 채워주었다. nx,ny를 통해서 현재 진행방향의 다음 부분이 0이 아니거나 갈 수 없는경우 k = (k+1)%3 을통해서 방향전환을 해주었다. 방향전환을 해 주었는데도 갈 수 없는 경우라면 프로그램을 종료하고 삼각형 부분을 배열에 순차적으로 넣어 반환하였다. function solution(n) { const dx = [0,1,-1] const dy = [1,0,-1] const arr = [...new Array(n)].map(v => new Arr..

    [JS] 쿼드압축 후 개수 세기

    문제의 유형이 같은 그림이 반복되면서 줄어드는것으로 보아 재귀함수를 활용해서 풀면 효율적일 것이라 생각했다. 기본적인 큰 틀로, 배열을 넣으면 0의 개수와 1의 개수를 반환해주는 함수를 만들었다. 1번 종료조건으로 만약 길이가 1이라면 해당 값을 배열에 담아서 리턴을 해주었고 2번 종료조건으로 모든 수가 같다면 해당 값을 배여렝 담아서 리턴해주었다. 그렇지 않다면 배열을 1/4씩 쪼개어 4번 재귀함수를 호출한 후, 그로구한 1과 0의 개수를 더해서 return해주었다. const recur = (arr) => { if (arr.length===1) return arr[0][0] ? [0,1] : [1,0] const std = arr[0][0] const halfLen = arr.length / 2 le..

    [JS] 메뉴 리뉴얼

    알파벳이 총 10개까지나오니 순열을 사용해도 괜찮을 문제라는 생각이 들었다. 따라서 각 order별로 2개,3개,4개라면 각각의 순열조합을 찾은이후 이를 Map 자료형에 매핑해가며 개수를 조합했다. 단, 음식들이 정렬되어서 나오지 않으니 정렬해주는 과정이 필요했다. Map자료형에서 최대값들을 뽑아내서 저장했는데, max_ 값을 2로 설정해서 만약 주문이 2개이상 나오지 않으면 저장하지 않도록 설정해주었다. 이후 나온 조합들을 모두 한 배열에 넣고 정렬해준 후 제출하였다. 순열,조합을 생각보다 완전탐색 문제들에서 자주 사용하게 되는것 같은데 언제든 바로바로 나올 수 있게 연습을 좀 더 해두어야 될 것 같다.. const getCombination = (ary,n) => { let ret = [] if (n..