문제링크https://www.acmicpc.net/problem/18870 문제풀이sort를 이용한 정렬, Set 객체를 이용한 중복제거 그리고 object key-value 구조를 이용하여 시간복잡도 최적화를 이용하여 문제를 풀 수 있었다. 별 어려움없이 클리어 완료!let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let N = Number(input[0]);let origin = input[1].split(" ").map((n) => Number(n));let arr = [...origin];arr.sort((a, b) => a - b);// 중복제거let set = new Set..
정렬
문제링크https://www.acmicpc.net/problem/1931 문제풀이이 문제는 정렬 기준을 확립하는게 핵심이다. 최대한의 많은 강의를 듣기 위해서는1. 강의의 끝나는 시간이 빠른 것 부터 오름차순2. 강의 끝나는 시간이 같을 때는 강의 시간이 가장늦은 것 부터 내림차순 but 시작하는 시간 = 끝나는 시간 일때는 뒤에 배치 해야한다. 위 조건대로 배열을 정렬할 시 최대 강의를 진행할 수 있다. 처음에는 확 와닿지 않겠지만 스스로 몇개의 케이스를 만들고 진행하다 보면 왜 위 조건으로 정렬하는지 바로 이해 할 수 있다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [..
문제링크https://www.acmicpc.net/problem/11399문제풀이각각의 사람이 ATM에서 돈을 빼는데 걸리는 시간의 총합이 최소가 되려면 인출하는 시간이 가장 짧은 사람일수록 앞 순서에 줄을 서야 된다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let N = Number(input[0]);let arr = input[1].split(" ").map((n) => Number(n));arr.sort((a, b) => { return a - b;});let dp = Array(N).fill(0);dp[0] = arr[0];for (let i = 1; i { ..
문제링크https://www.acmicpc.net/problem/1181 문제풀이set 객체를 통해 중복된 문자열을 제거하고sort()로 알파벳 순서대로 문자를 배열 한 뒤다시 글자 길이를 비교하여 정렬하였다.딱딱히 어려움 없이 풀 수 있었다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [n, ...words] = input;let set = new Set();words.forEach((word) => { set.add(word);});let arr = [...set];arr.sort();arr.sort((a, b) => { if (a.length !== b.le..
문제링크https://www.acmicpc.net/problem/1141 문제풀이문자들을 비교하면서 문자가 긴 단어일 수록 다른 단어의 접두어가 될 확율이 떨어진다. 이를 고려하여 두 단어중 하나의 단어가 다른 단어의 접두어가 될 때 두 문자중 이왕이면 긴 문자를 집합에 포함함으로 써 최대한 많은 단어를 집합에 포함시킬 수 있다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().split("\n");let dic = [];for (let i = 1; i