본문 바로가기

전체 글

(122)
[C4] 11725 - 트리의 부모찾기 문제 풀이보통은 트리 구조를 만들거나, 자식 트리를 찾는 문제가 많은데 이번에는 부모 트리를 찾는 문제가 나왔다.나는 최상위 노드부터 한단계씩 아래로 내려가는 방법을 사용하기 위해  bfs를 이용했다.각 노드별로 탐색하며, 현재 탐색하는 노드에 자식 노드가 있다면, 그 자식 노드의 부모 노드로 현재 노드를 추가해주는 방법을 사용하기로 했다. 먼저 그래프 구조를 만들어 준다.const graph = {};input.forEach(([s, e]) => { if (!graph[s]) graph[s] = []; if (!graph[e]) graph[e] = []; graph[s].push(e); graph[e].push(s);}); 그래프 구조를 만들면, 한 노드에 연결된 노드들이 어떤 것이 있는지 알 ..
[C3] 5430 - AC 문제세상에 할 일이 없어서 새로운 언어를 만드는 사람이 어딨나,,,,,,, 풀이사실, 처음 봤을 때는 R은 뒤집기, D는 삭제라 하니...당연히 reverse()와 shift()를 쓰면 되는거 아닌가? 라고 생각했지만그렇게 당연하게 풀리는 문제가 골드5일리가 없다..!!!!의심하고 또 의심하며 처음부터 다른 풀이 방법을 사용해 보기로 했다. 우선, 테스트케이스가 최대 100개, 주어지는 함수의 개수가 최대 10만개, 배열의 요소가 최대 10만개이다.reverse()의 시간 복잡도는 O(n)이므로, 최악의 경우 복잡도는 O(n^2).그러므로 최대한 메서드를 쓰지 않고, 1차원 for문 안에서 해결하는 것을 목표로 했다. 내가 생각했던 방법은 투포인터?와 비슷한 방법으로, 시작 인덱스와 끝 인덱스를 정해놓고..
[Next] Next.js의 layout 적극 활용해 보기 next.js를 사용하다 보면, 가끔씩 모든 페이지에서 보이는 컴포넌트가 필요할 때가 있다.예를들면 헤더라던가...내비게이션바라던가...또는 앱 라우팅을 사용할 때, 특정 라우터를 가지는 모든 컴포넌트들이 공통된 스타일을 가진다던가...보통 React였다면 전체적인 틀을 가지는 공용 컴포넌트를 설정해 놓고, 라우팅 경로에 따라 각각 다른 데이터를 넣어주는 방식을 사용할테지만, Next.js에는 'Layout'이라는 아주 좋은 기능을 제공하고 있다.그런 의미에서, layout을 어떻게 사용하고 또 적용하는지에 대해 실제 페이지 제작을 통해 알아보도록 하자.1. layout의 적용 범위 우선 레이아웃은 'Root layout'과 'Local layout'으로 나뉜다.루트 레이아웃은 말 그대로 '앱 내 모든 ..
[C4] 1149 - RGB거리 문제풀이DP를 이용해 직전 집을 칠하는 데 드는 비용의 최솟값으로부터 현재 집을 칠하는데 필요한 비용을 계산한다.예를 들어 직전 집을 칠하는데 각각 100, 200, 300원이 들었고, 지금 집을 빨간색으로 칠하는데 50원이 든다면직전 집들을 칠하는 비용 + 지금 집을 빨간색으로 칠하는데 드는 비용을 비교해서 집을 빨간색으로 칠하는데 드는 최소 비용을 찾아준다.위 예시에서는 150, 250, 350중 최솟값인 150원이 이 집을 빨간색으로 칠하는데 드는 비용이다.이 조건만 보면 간단한 dp로 해결 할 수 있다. 하지만 주의해야 할 것은 직전 집과 같은 색상으로는 칠할 수 없다는 조건이 붙어있다. 이전 집을 빨간색으로 칠했다면, 다음 집은 빨간색이 아니라 초록색 또는 파란색으로밖에 칠할 수 없다는 것이다...
[C3] 1260 - DFS와 BFS 문제풀이DFS는 재귀로, BFS는 큐를 이용해서 풀었다.먼저 노드 정보를 이용해 그래프를 만들어준다.그래프는 객체로 만들어도 되고, 이차원 배열로 만들어도 되는데 나는 일단 이차원 배열을 사용하고 있다.노드가 n개, 간선이 m개이므로 그래프는 n개의 요소를 가진 이차원 배열이고, n번 노드와 연결된 노드들을 n-1번 배열에 넣어주면 된다.편의를 위해 n이 아니라 n+1개의 배열을 만들어주고, 0번 배열은 비워 1번부터 시작하도록 해주면 좋다노드연결된 노드0-12, 321, 431, 441,2,3 const graph = Array.from({ length: n + 1 }, () => []); input.forEach((el) => { const [s, e] = el; graph[s].push..
[C3] 9375 - 패션왕 신해빈 문제 여러 종류의 의상을 매치 시키는 문제이다약 8개월 전에 풀었던 프로그래머스의 '의상' 문제와 동일한 문제.https://kinggh.tistory.com/98 240320 의상문제 설명 코니는 매일 다른 옷을 조합하여 입는것을 좋아합니다. 예를 들어 코니가 가진 옷이 아래와 같고, 오늘 코니가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추kinggh.tistory.com 당시에는 그냥 풀이를 보고 이해 없이 풀었는데, 이 문제를 다시 풀며 완벽히 이해할 수 있었다.풀이입력이 까다로워서, 입력을 제외하고 첫번째 TC만 보자headgear에 hat, turban이 있고eyeware에 sunglasses가 있다.각 종류별 2개, 1개의 의상이 있기 때문에각 의상들을 매치하는 경우..
[C3] 14940 - 쉬운 최단거리 문제 풀이각 점들이 시작 지점으로부터 얼마나 떨어져 있는지를 나타내는 문제이다.시작 지점(2)가 무조건 [0,0]이 아니기 때문에, 상하좌우 사방으로 움직여가며 거리를 찾고, 0으로 되어 있는 부분은 이동 할 수 없으므로 패스한다.당연스럽게 BFS를 사용해 문제를 풀었다.문제의 조건 중에 '원래 0이었던 부분'은 0으로, 탐색 할 수 없는 부분은 -1로 나타내 주라고 했기 때문에시작 지점으로부터 떨어진 거리를 표기할 새로운 지도를 만들되 모든 원소를 -1로 설정하고, 기존 지도와 비교해서 0인 부분은 0으로 바꿔준다.이후 BFS 로직을 통해 0이 아닌 위치는 거리로 바꿔주면 이동하지 않은 곳은 -1로 그대로 남게 된다. 코드const readline = require("readline");const rl..
백준 자바스크립트(Node.js)를 쉽게 입력하는 방법을 탐구하다 코딩테스트 연습을 하려면 백준에서 문제를 푸는 것은 필수 코스이다만은백준은 프로그래머스처럼 자바스크립트 자체 지원이 안된다.자바스크립트를 쓰고 싶으면 node.js를 선택해야 하는데,아마 백준에서 node.js를 쓰려면 굉장히 복잡한 과정을 거쳐야 하기에 포기한 사람들이 많을 것이라 생각된다.물론 나도 그랬고,.,.,.., 여튼 최근 node.js를 사용하는 방법을 깨달아서, 어려움을 겪는 사람이 있다면 참고해 보자.1. 입력 템플릿const readline = require('readline');const rl = readline.createInterface({ input: process.stdin, output: process.stdout,});// 1. 여기에 전역으로 쓰일 변수를 선언한다rl...