FrontEnd
[JS] 모두 0으로 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/76503 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이는 후위탐색을 활용하면 된다. 트리의 뿌리노드부터 루트 노드까지 값을 전달해준다.. 라는 생각을 하면 된다. 이때 굳이 양수가 아니라 음수가 나오더라도 0이 되도록 음수를 전달해도 된다는 개념으로 접근하면 된다. 따라서 재귀함수를 활용하여 뿌리노드부터 0으로 만들어가며 남은 값들을 부모노드로 전달해주었고 옮긴 만큼의 값을 저장했다. function solution(a, edges) { co..
[JS] 다단계 칫솔 판매
https://school.programmers.co.kr/learn/courses/30/lessons/77486 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제를 해결할 때 꼭 생각해야 하는 점이있다. (내가 실수한 부분이기도 하다) 처음에는 판매자의 모든 칫솔 판매량을 한번에 계산한 후 그 판매량의 10%를 부모에게 올라가도록 설계했었다. 하지만 위 방식으로는 해결할 수 없다. 1개씩 10번 판매했을 경우와 10개씩 1번 판매했을 경우를 생각해 보자. 1개씩 10번 -> 100원의 이익이 10번 발생한 것이므로 2번 부모를 거치면 보낼 돈이 0원이..
[JS] 110옮기기
https://school.programmers.co.kr/learn/courses/30/lessons/77886 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음에 문제 풀이방식을 너무 어렵게 생각해서 헤맨 문제였다. 규칙자체는 간단하다. 1. 문자열 중 "110" 이 들어간 부분을 모두 빼주고 그 개수를 세준다. 2. 남은 문자열중 "11" 이 처음 나오면 11 전에 110 * cnt 만큼의 문자열을 삽입해준다. 3. "11"이 없다면 마지막으로 나온 0의 다음에 110*cnt만큼의 문자열을 삽입해준다. 4. 그외 경우는 "1"만 있는 경우이므로 1..
[JS] 아날로그 시계
약간은 재밌는 방법으로 해결하였다. 프로그래밍적 관점보다는 시계에 관련된 특성을 조금 활용해서 직접 풀어보았다. 시침,분침,초건이 만나는 조건을 잘 생각하면 수학적으로 해결이 가능하다. 기본적으로 1분에 초침이 한바퀴를 돌며 시침,분침 두개를 한번씩 만난다고 가정해보자 그런데 잘생각해보면 59분 -> 00분으로 갈때는 초침과 분침이 만나지 않는데 59분인 경우 초침이 한바퀴를 돌아서 00분이 되는 경우에만 만나기 때문이다. 같은 원리로 분침,초침또한 11시->12시로 이동할때는 겹치지 않게된다. 즉 59분->00분으로 갈때마다 (한시간마다) 만나는 횟수를 1씩 빼주고 12시 00분인 경우에만 특이처리를 해주면 된다. [조금더 쉬운 설명!!~] 0시0분0초 ~ 23시59분59초까지 시,분,초침이 만나는 횟..
[JS] 수레 움직이기
예외처리가 조금 복잡한 BFS문제였다. 아래 항목들만 생각하면 문제에 조금 쉽게 접근할 수 있다. 1. 한턴에 빨간공,파란공은 한번씩 움직인다. 2. 빨간공이나 파란공이 도착했다면 더이상 움직이지 않는다. 3. 두 공은 같은 위치로 움직일 수 없다. 4. 두 공은 서로 교차하며 움직일 수 없다. 1번에서 특히 빨간공 파란공이 한번에 움직인다는 점에 포커스를 두면 된다. BFS를 통해서 빨간공을 상,하,좌,우로 움직이는 경우마다 파란공또한 움직이면 된다. map의 size가 5*5로 주어지는 이유이다. 총 16가지의 경우의 수들을 한 턴마다 증가시키면서 검사해야하기 때문이다. function solution(maze) { const rLen = maze.length const cLen = maze[0].l..
[JS] 석유 시추
문제 자체는 정말 어렵다고 느껴질 정도의 난이도는 아니었으나 효율성 부분을 해결하는데 애를 많이 먹은 문제였다. 문제 자체는 단순하게 접근할 수 있다. 모든 석유덩이의 크기를 미리 계산해둔 후, 세로선마다 석유덩이의 값을 계산해주면 된다. 처음에는 dfs를 활용해서 석유덩이의 크기를 계산한 이후 유니온-파인드를 통해서 석유덩이들의 부모노드에 크기를 저장하려 했었다. // 부모노드를 찾는 함수 function getParent(parentArr, i, j) { if (parentArr[i][j][0] === i && parentArr[i][j][1] === j) { return [i, j]; } parentArr[i][j] = getParent( parentArr, parentArr[i][j][0], pa..