FrontEnd
[JS] 괄호 변환
문제에서 주어진대로 해결하면 되는 구현 문제였다. 개인적으로 이러한 구현문제들은 추상화를 해서 구현을 하면 실수할 확률이 많이 적어지는 것 같아서 최대한 추상화를 해서 해결해보았다. 1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. 2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다. 3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다. 3-1. 수행한 결과 문자열을 u에 이어 붙인 후 반환합니다. 4. 문자열 u가 "올바른 괄호 문자열"이 아니라면 아래 과정을 수행합니다. 4-1. 빈 문자열에 첫 번째 문자로 '('를 붙입니다. 4-..
[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..