목록전체 글 (316)

https://www.acmicpc.net/problem/1931 해당 문제는 N개의 회의와 각각의 회의의 회의 시작 시간, 끝 시간이 존재할 때 회의실을 사용할 수 있는 최대의 경우를 출력하는 문제다. 문제 풀이 방식 먼저 회의실을 사용하지 않는 경우인 배열(result)을 기본값을 0(어떤 값이든 들어올 수 있는 값)으로 초기화하여 정의했다. 이후 회의실은 시간순에 따라 순차적으로 되기 때문에 정렬이 우선적으로 필요한데, 이때 끝시간이 짧은 것을 우선 순위로 두어야 한다. (만약 [1 5, 2 3, 3 4] 값이 입력값으로 주어질 때 시작 시간을 우선 순위로 두어 정렬할 경우, 회의를 한 번 밖에 할 수 없기 때문임.) 이후 배열에 들어가 있는 마지막 값(가장 최근 회의의 끝 시간)과 시작 시간을 비..

https://www.acmicpc.net/problem/18223 해당 문제는 최단 경로라는 그 말마따나, 최단 경로 문제를 해결하기에 용이한 다이크스트라 알고리즘으로 접근했다. 풀이 방식은 다이크스트라 알고리즘을 구현할 수 있다면 어렵지 않은데, 민준이가 곧장 마산으로 가는 경우가 민준이가 건우 위치를 경유하여 마산으로 가는 경우를 비교하여 답안을 출력하면 된다. 전체 소스 코드 import sys data_temp = sys.stdin if sys.platform == 'linux' else open('입력.txt', 'r') input_data = data_temp.read().splitlines() import heapq def solution (data) : arr = [list(map(int..

https://www.acmicpc.net/problem/7562 해당 문제는 가로 한칸, 세로 두 칸 혹은 가로 두 칸, 세로 한 칸씩 움직이는 체스판의 '나이트'가 목적지에 도착하기 위해 몇번을 움직여야 하는지 출력하는 문제다. 문제 해결 방식 최소 움직임을 요구하기 때문에, BFS 알고리즘을 활용해서 접근했다. queue 역할을 위한 배열을 선언한 뒤, (x좌표, y좌표, 거리)를 대입한 뒤 BFS 알고리즘을 통해 해결하면 되는데, 이때 나이트가 움직일 다음 위치만 신경써주면 된다. 전체 소스 코드 const fs = require("fs"); const input = fs .readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt") ..

https://www.acmicpc.net/problem/11722 해당 문제는 다이나믹 프로그래밍으로 문제해결이 가능하다. 풀이 과정은 다음과 같다. 먼저 수열의 '길이'를 출력하는 것이므로, DP 테이블의 기본값은 1로 설정한다. (자기 자신만 포함하는 경우) 여기서 두번째 반복문의 범위는 0 arr[i] 조건을 만족하며, 이전 요소를 마지막으로 하는 부분 수열의 길이에서 현재 요소를 추가할 경우의 길이(dp[j] + 1)가, 현재 요소를 마지막으로 하는 부분 수열의 길이(dp[i])보다 큰 경우 dp[i] = dp[j] +1 로 값을 수정해 나아가며 dp 테이블을 완성한다. const fs = require("fs"); const input = fs .readFileSync(process.platf..

https://www.acmicpc.net/problem/11055 해당 문제는 다이나믹 프로그래밍을 활용하여 풀이할 수 있는 문제다. 풀이과정은 다음과 같다. 먼저 가장 큰 부분 수열의 '합'을 구하는 것이므로 DP 테이블의 기본값은 입력값으로 초기화한다. (이는 자기 자신만 포함하는 경우이기도 하다.) 이후 두번째 반복문의 범위는 0 arr[j]) 현재 요소를 마지막으로 한 부분 수열의 합 dp[i]보다 현재 요소 값 + 이전 요소를 마지막으로 한 부분 수열 합(arr[i] + dp[j])의 값이 클 경우 (arr[i] + dp[j] > dp[i]) dp[i] 를 arr[i] + dp[j] 로 수정해준다. import sys data_temp = sys.stdin if sys.platform == '..

먼저 class-validator란, 자바스크립트 또는 타입스크립트에서, 객체의 유효성을 검사하고 검증하는데 도움을 주는 라이브러리다. 이를 사용하면 다양한 유효성 검사 규칙을 정의하고 이를 객체에 적용할 수 있다는 장점이 있다. (예를 들어, 이메일 주소가 올바른 형식인지 확인하거나 비밀번호가 일치하는지 확인하는 등의 검증 규칙을 정의할 수 있다.) 아래는 class-validator를 사용하여, user DTO인 nickname의 길이가 1에서 50 사이인지 검증하는 것을 보여준다. nickname의 길이가 규정한 1보다 작거나, 50보다 클 경우 'Bad Request' 에러를 자동적으로 반환한다. import { Field, InputType } from '@nestjs/graphql'; impo..

https://www.acmicpc.net/problem/15989 해당 문제는 다이나믹 프로그래밍을 활요해야 풀이해야 시간제한 내에 풀 수 있는 문제다. 비슷한 문제를 풀이하고 풀이 과정을 포스팅한 링크를 남긴다. 2023.11.09 - [개발/algorithm] - 프로그래머스 Lv.3 - 거스름돈 (DP) Python 해당 문제의 접근 방법을 소개하기 앞서, 0부터 6까지 [1,2,3]을 활용해서 만들 수 있는 경우를 표로 나타내면 다음과 같다. 0 1 2 3 4 5 6 1을 사용 1 1+1 1+1+1 1+1+1+1 1+1+1+1+1 1+1+1+1+1+1 1,2를 사용 2 2+1 2+1+1 2+2 2+1+1, 2+2+1 2+1+1+1+1 2+2+1+1 2+2+2 1,2,3을 사용 3 3+1 3+1+..

https://www.acmicpc.net/problem/13565 해당 문제는 DFS 알고리즘에 대해 이해하고 있다면 쉽게 해결할 수 있다. 문제 풀이 과정 이 문제에서 유의할 점이 있다면 백준의 여타 다른 DFS 문제와 달리 모든 좌표에 DFS 알고리즘을 동작시키는 것이 아니다. outer side인 첫 번째 배열에서만 값이 이동가능한 좌표인 경우(0인 경우) DFS 알고리즘을 동작시킨 뒤, 마지막 배열에 방문 기록이 존재하는지 파악 후 답안을 출력했다. 전체 소스 코드 const fs = require("fs"); const input = fs .readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt") .toString() .trim..