FrontEnd
[JS] 방문 길이
방문 배열을 설정하는데, 방문한 좌표를 기록해 나가는 것이 아닌, 길을 저장하는게 문제의 키 포인트이다. 따라서 방문된 곳을 저장하는 배열에 상,하,좌,우를 기록하기위해 3차원 배열을 통해 각 좌표마다 [false,false,false,false] 와 같이 저장하게 해두었다. 각각 상,우,하,좌 순서대로 저장하게 해 두었고 만약 방문하지 않은 배열이라면 해당 길들을 방문처리 해주면된다. function solution(dirs) { const d = { "U" : [0,-1], "R" : [1,0], "D" : [0,1], "L" : [-1,0], } const dIdx = { "U" : 2, "R" : 3, "D" : 0, "L" : 1, } const ndIdx = { "U" : 0, "R" : 1,..
[JS] 문자열 압축
문자열을 1~s.length 까지 하나씩 검사해봐서 가장 최소의 경우를 찾았다. reduce를 활용해서 문제에서 말하는대로 문자열을 만들었다. 단, aabbccdd 가 문제에서 2a2b2c2d였다면 a2b2c2d2
[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..