전체 보기232 [백준] 1766 문제집 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 어떤 문제들을 풀어야만 다음 문제를 풀 수 있으므로 위상 정렬을 이용하여 풀이하였습니다. 처음 문제를 접하였을 때, 세번째 조건인 쉬운 문제부터 풀어야 한다는 조건을 만족시키기 위하여 한문제를 풀이하고 문제 번호가 낮은 문제부터 다시 탐색하며 풀이를 진행하였습니다. 그러나 반복문을 이용하여 계속해서 앞쪽 문제부터 순서대로 탐색을 진행하여 불필요한 탐색이 많아졌고 시간초과가 발생하였습니다. 시간을 단축하기 위하여 한 문제를 풀이하고 계속 처음 앞쪽 문제부터 탐색을 진행하는 것이 아니라 최소힙을 이용하여 먼저 풀어야하는 문제를 다 푼 경우 최소힙에 추가하였습니다. 이로 인하여 가장 쉬운 문제부터 푸는 조건을 만족시키며 시간 단축이 가능했습니다. 2) 알고.. 2022. 5. 30. [Next.js] 페이지 나누기 (라우팅) Next.js 를 이용한 개발에서 가장 기초적이며 필수적인 요소로 페이지 라우팅 입니다. 해당 포스트는 Next.js 에서 페이지 구성하는 방법과 진행한 프로젝트에서 어떠한 방식으로 라우팅을 이용하였는지에 대해 다루었습니다. 📘 React 페이지 구성과 라우팅 React 를 이용할때는 페이지를 구분하고 이동시키기 위하여 라우터 기능이 있는 react-router 라이브러리를 이용해야 합니다. 해당 라이브러리를 이용하기 위해서는 react-router 에 대한 추가적인 학습이 필요하고, 와 등을 이용하여 라우팅 구성이 필요합니다. 이러한 점이 React 에서 페이지를 구성하는것에 어려움을 가져다줍니다. 📗 Next.js 페이지 구성과 라우팅 Next.js 는 라우팅 기능을 내장하고 있어 손쉽게 페이지를 구.. 2022. 5. 28. [프로그래머스] 입국심사 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 특정 시간 내에 인원을 모두 심사가 가능한지 여부 판별을 위해 이분 탐색을 이용하였습니다. 시간을 기준으로 필요한 최소 시간과 최대 시간을 우선적으로 구한 이후, 최소 시간을 탐색했습니다. 중간 시간을 적용하여 n명 이상 심사가 가능하면, 더 적은 시간으로 가능한지 탐색하였습니다. n명 심사가 불가능하다면, 더 많은 시간을 적용하여 탐색하였습니다. 2) 알고리즘 이분탐색 3) 풀이 코드 사용 언어 - JavaScript function solution(n, times) { let answer = 0 // 정답 변수 let min_time = 1 // 심사를 모두 마치는 최소 시간 let max_time = n * Math.max(...times) //.. 2022. 5. 27. [백준] 1655 가운데를 말해요 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 숫자가 순서대로 입력되었을때, 숫자들이 계속해서 정렬을 유지해야합니다. 초기에 하나의 큐를 이용하여 값을 정렬하고, 새로운 값이 들어올때 새로운 큐를 만들어 순서를 정렬하였으나 입력의 개수가 많아지게 되어 시간 초과가 발생하였습니다. 이후 최소힙과 최대힙을 이용하여 중간값을 유지시키도록 하였습니다. 중간값이 있을때, 중간 값보다 큰 값이 들어오는 경우, 최소힙에 새로운 값을 넣었습니다. 이렇게 하면 중간 값보다 크지만, 그 이후 값들은 작은 값들을 우선적으로 꺼낼 수 있습니다. 중간 값 보다 작은 값은 최대힙에 넣어, 중간 값과 가까운 수를 먼저 꺼낼 수 있도록 하였습니다. 숫자가 짝수개의 길이라면 두개의 값 중 작은 값을 꺼내야 하기에, 중간값보다 .. 2022. 5. 26. [프로그래머스] 추석트래픽 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 입력으로 들어온 문자열 형태의 시간 정보를 서로 계산하기 쉽게 하기 위하여 밀리초로 변경하였습니다. 변경된 밀리초를 하나의 객체의 키값으로 저장하였고, 시작시간인 경우 +1 을, 종료 시간인 경우 -1 을 연산하였습니다. 이후 객체의 키들을 오름차순으로 정렬하였고, 키값들을 순환하며 초당 최대 처리량을 구하였습니다. 2) 알고리즘 문자열 3) 풀이 코드 사용 언어 - JavaScript function solution(lines) { let answer = 0 // 정답 const timeline = {} // 타임라인을 저장할 객체 lines.map(v => v.split(' ')).forEach(v => { const hour = parseInt(.. 2022. 5. 24. [백준] 14890 경사로 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 지나갈 길의 경우를 모두 리스트에 담아 두었고, 이 길을 돌아가며 경사로를 이용하여 지나갈 수 있는지 확인하였습니다. 경사로 가능 여부 조건을 확인하며 구현하였습니다. 2) 알고리즘 구현 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') def solution(c): prev = c.pop() # 이전 땅의 높이 stack = [prev] # 경사로를 놓을 수 있는 여분의 땅 while c: # 다음 땅이 남아있다면 next = c.pop() # 다음 땅의 높이 if prev == next: # 이전 땅과 높이가 같으면 스택에 경사로 stack.append(next) # 여분땅 추가 e.. 2022. 5. 23. [프로그래머스] 단어 변환 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 해당 조건을 만족하면서 재귀를 이용하여 완전탐색으로 접근하였습니다. 2) 알고리즘 완전탐색 재귀 3) 풀이 코드 사용 언어 - JavaScript function solution(begin, target, words) { let answer = 1e10 // 최솟값을 구해야하므로 초기에 가장 높은 값으로 초기화 const N = words.length // 변환 가능한 단어의 개수 const visited = Array(N).fill(false) // 해당 단어로 변환을 했었는지 확인을 위함 function sol(n, now, ans) { // 남은 변환 가능 단어 개수, 현재 단어, 변경한 횟수 if (now === target) { // 타겟과 .. 2022. 5. 13. [Next.js] 기본 개념과 프로젝트에 사용한 이유 진행하는 프로젝트의 프론트엔드 기술 스택으로 Next.js 를 사용하게 되었습니다. 해당 포스트는 Next.js 에 대한 간략한 설명과 진행한 프로젝트에서 Next.js 를 사용하게 된 이유에 관한 내용을 담았습니다. 이후의 Next.js 관련 포스트는 Next.js 를 이용하면서 발생한 이슈들에 대해 다룰 예정입니다. 📖 Next.js 에 대하여 위키백과에서는 Next.js 를 아래와 같이 설명하고 있습니다. Next.js 는 Node.js 를 기반으로 구축된 오픈 소스 웹 개발 프레임워크로, 서버 측 렌더링 및 정적 웹사이트 생성과 같은 React 기반 웹 애플리케이션 기능을 가능하게 합니다. 위키 백과 : https://en.wikipedia.org/wiki/Next.js 위의 내용에서 Next.j.. 2022. 5. 12. [프로그래머스] 최고의 집합 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 수학적으로 접근하였을때, 곱을 최대한 높은 값을 가지기 위해서는 숫자들 간 차이가 적을수록 높은 곱의 결과를 갖게 됩니다. 첫번째 조건에서 특정 개수의 숫자들의 합은 동일해야하므로, 곱의 결과만 높게 만들어주는 숫자들의 조합을 찾으면 됬습니다. 숫자들의 합을 숫자의 개수로 나누어 몫을 구하였습니다. 이로인해 모든 숫자들의 차이가 동일하도록 만들어주었습니다. 나머지가 발생하는 경우에는 숫자들을 순서대로 돌며 1씩 더해주어 숫자들간 차이를 최소로 만들어주었습니다. 2) 알고리즘 수학 3) 풀이 코드 사용 언어 - Python def solution(n, s): answer = [] num = s // n remain = s % n if not num: #.. 2022. 5. 12. [프로그래머스] 파괴되지 않은 건물 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 적의 공격 또는 아군의 회복 스킬이 발동할때 마다 2차원 배열을 반복하며 값을 변경하는 방법은 2차원 배열을 너무 자주 반복하여 많은 시간이 소요됩니다. 2차원 배열을 반복을 줄여 효율성을 올리기 위하여, 누적합을 이용하였습니다. 스킬이 사용될때 2차원 배열을 반복하는것이 아니라 스킬의 영향이 미치는 영역의 4개의 모서리에 변화량을 기록하였습니다. 모든 스킬에 대한 변화량을 기록한 이후, 마지막에 2차원 배열을 반복하여 기록된 변화량에 따라 2차원 배열의 모든 좌표들의 값을 산정하였습니다. 2) 알고리즘 누적합 3) 풀이 코드 사용 언어 - Python def solution(board, skills): answer = 0 N = len(board) .. 2022. 5. 9. [프로그래머스] 짝지어 제거하기 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 인접한 두개의 문자가 동일한지 판별하여, 동일한 경우 두개를 제거하는 방식이였습니다. 인접한 두개의 문자를 비교하기 위하여 스택을 이용하였습니다. 2) 알고리즘 스택 3) 풀이 코드 사용 언어 - JavaScript function solution(s) { let stack = [] // 문자열 하나하나 저장할 스택 Array.from(s).forEach(v => { // 문자열을 배열로 변경하여 알파벳 하나씩 반복 if (stack.length === 0) { // 스택이 비어있으면, 문자 추가 stack.push(v) } else if (stack[stack.length-1] === v) { // 스택의 가장 최근 값이 현재 문자랑 동일하면, 짝지.. 2022. 5. 9. [프로그래머스] 네트워크 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 각 컴퓨터를 반복하면서 DFS 탐색을 하여 연결 관계를 확인하였습니다. 컴퓨터를 반복하던 중 이미 네트워크가 속한것을 확인한 경우, 건너뛰며 아직 속하지 않은 컴퓨터들을 탐색하며 네트워크 개수를 확인하였습니다. 2) 알고리즘 DFS 3) 풀이 코드 사용 언어 - JavaScript function solution(n, computers) { let answer = 0 // 정답 변수 let visited = Array(n).fill(0) // 각 노드의 방문 여부를 저장 let linked = Array(n).fill(0).map(() => []) // 각 노드별 연결 관계 (2차원 배열) function dfs(start) { // DFS 탐색 le.. 2022. 5. 5. 이전 1 ··· 3 4 5 6 7 8 9 ··· 20 다음