그리디 알고리즘.. 솔직히 막 이름은 있어보이는데 결론적으로는 그냥 가장 최적의 방식을 쓰는 알고리즘이라는 말 같다 이 문제는 괄호를 쓰면 먼저 계산되는 순서를 통해서 가장 최소값을 만드는 것이 문제다. 덧셈끼리 있을땐 괄호가 사실 필요없고.. 마이너스끼리 있을때..도 괄호가 크게 필요없고 덧셈과 마이너스가 같이 있을때 이제 덧셈끼리는 다 더하고 빼버리는게 가장 크게 최소값을 만드는 방법이라는 것을 찾으면 꽤 풀기 쉽다(근데 난 어렵다 여전히!!!!!!!!!!!!) 그니까 55 - 40 + 54 라는 문장에서 55 / 40+54 로 -를 기준으로 묶고 (괄호를 추가한다는 뜻) 40+54를 먼저 진행해준뒤 모든 계산을 -로 진행해주면 최소 값이 나온다 // readline 모듈보다는 fs를 이용해 파일 전..
전체 글
뭐든 공부하면 언젠간 다 도움이 될거야// readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기 const fs = require('fs') const input = fs .readFileSync(process.platform === "linux" ? "/dev/stdin" : "test.txt") .toString() .trim() .split("\n"); function solution(data) { let N = Number(data[0]); let myMap = new Map; let dataOrg = input[1].split(' ').map(Number); dataOrg.sort(function(a,b){ return a - b; }); let sum = 0; let sum2 = 0; for(let p of d..
해당 문제는 각 화폐의 단위가 배수관계에 속하기 때문에 그리디 알고리즘으로 풀이할 수 있다 // readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기 const fs = require('fs') const input = fs .readFileSync(process.platform === "linux" ? "/dev/stdin" : "test.txt") .toString() .trim() .split("\n"); function solution(data) { let [N,K] = input[0].split(" ").map(Number); let coin = new Array(); // 동전꾸러미 for(let i = 1 ; i
// readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기 const fs = require('fs') const getInput = (filePath) => { return fs .readFileSync(filePath) .toString() .trim() .split(/\n/); } const input = getInput('test.txt'); // 제출시 여기 '/dev/stdin' 으로 변경 let data = input[0].split("").map(Number); data.sort(function(a,b){ return b - a; }); let ans = ""; for(let p of data){ ans += p; } console.log(ans);
sort에 들어가는 compare 함수에 (a,b) 의 return 값이 1보다 큰 경우 a -> b 순서 return 값이 1보다 작은 경우 b -> a 순서(인덱스를 b를 더 작게 줌) return 값이 0 인 경우 값이 똑같다 .. 자꾸 까먹는다 ㅠㅠ // readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기 const fs = require('fs') const getInput = (filePath) => { return fs .readFileSync(filePath) .toString() .trim() .split(/\n/); } const input = getInput('/dev/stdin'); // 제출시 여기 '/dev/stdin' 으로 변경 let count = Num..
문제이해하는게 약간 시간이 걸렸다 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. { return fs .readFileSync(filePath) .toString() .trim() .split(/\n/); } const input = getInput('/dev/stdin'); // 제출시 여기 '/dev/stdin' 으로 변경 let count = Number(input[0]); let dataOrg = input[1].split(' ').map(Number); // 중복제거 data = [...new Set(dataOrg)]; // 중복제거 data.sort(function(a,b){ if(a>b) return 1; else if(a
new Set을 이용해 중복을 제거할 줄만 알면 좀 할만한 알고리즘 문제 compare 함수 짜는거 은근 머리아프다 // readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기 const fs = require('fs') const getInput = (filePath) => { return fs .readFileSync(filePath) .toString() .trim() .split(/\n/); } const input = getInput('/dev/stdin'); // 제출시 여기 '/dev/stdin' 으로 변경 let count = Number(input[0]); let data = new Array(); for(let i = 1; i b) return 1; else if(a
11650에서 바뀐 조건만 확인하면 됨 js에서 제공하는 sort함수의 경우 O(NlogN)의 최적의 알고리즘을 찾아서 돌리기때문에 크게 무슨 정렬을 쓸지는 고민할 필요없다 단 sort 함수 못쓰고 정렬을 구현해라할 수 도 있으니 병합정렬 정도는 sort함수 없이 구현할 줄 알아두도록 합시다. // readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기 const fs = require('fs') const getInput = (filePath) => { return fs .readFileSync(filePath) .toString() .trim() .split(/\n/); } const input = getInput('/dev/stdin'); // 제출시 여기 '/dev/stdin' ..
해당 문제는 js의 구조분해할당(Destructuring_assignment) 개념을 알고 있으면 수월하게 풀 수 있을 것 같다 x,y 좌표를 한번에 받아서 가지고 있어야하는데 [x,y] 라는 형태로 저장하려면 구조분해할당개념을 알고 있으면 수월하게 처리가 가능하다 그리고 js의 sort 함수는 함수내에 compare()함수를 통해서 내가 원하는 방식으로 내림차순 or 오름차순을 사용할 수 있는데 x 좌표가 같은 경우는 y 좌표를 통해서 검증하는 내용을 놓치지 않으면 쉽게 풀 수 있을 것 같다 // readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기 const fs = require('fs') const getInput = (filePath) => { return fs .readFi..
js로 값을 받을때는 꼭 Number을 쓰도록하자 첨에 arr 5개만큼 for돌리려다 읭 근데 이미 arr2가 5개아닌가..? 하고 해당 동작은 생략했음 // readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기 const fs = require('fs') const getInput = (filePath) => { return fs .readFileSync(filePath) .toString() .trim() .split(/\n/); } const input = getInput('test.txt'); // 제출시 여기 '/dev/stdin' 으로 변경 let arr1 = input[0].split(' ').map(Number); let arr2 = input[1].split(' ')...