πŸ”‘ μ•Œκ³ λ¦¬μ¦˜/λ°±μ€€ JS

[λ°±μ€€] λ¬Έμžμ—΄ / node.js 1427 μ†ŒνŠΈμΈμ‚¬μ΄λ“œ

Tamii 2021. 5. 1. 04:38
λ°˜μ‘ν˜•

πŸ“Œ1427 μ†ŒνŠΈ μΈμ‚¬μ΄λ“œ

 

www.acmicpc.net/problem/1427

 

1427번: μ†ŒνŠΈμΈμ‚¬μ΄λ“œ

첫째 쀄에 μ •λ ¬ν•˜κ³ μžν•˜λŠ” 수 N이 주어진닀. N은 1,000,000,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

www.acmicpc.net

 

λ‚΄ 풀이

const fs = require("fs");
const input = fs.readFileSync('/dev/stdin').toString().trim();


for (let i = 0; i < input.length; i++) {
  numLst.push(input[i]);
}

console.log(
  numLst
    .sort((a, b) => b - a)
    .join("")
    .trim()
);

2143 => "2143"

ν•˜λ‚˜μ˜ 문자둜 μž…λ ₯λ°›μŒ

for 문을 돌며 배열에 λ„£κΈ°

μ •λ ¬ 

 

λ‹€λ₯Έ 풀이

const arr = require("fs").readFileSync("/dev/stdin").toString().trim().split("").map(i=>parseInt(i));
const nums = Array(10).fill(0);
arr.forEach(i => nums[9-i] += 1);
let sorted = "";
for (let i=0; i<nums.length; i++) {
    sorted += String(9-i).repeat(nums[i]);
}
console.log(sorted)

μ €λ²ˆμ— μ •λ ¬ν•  λ•Œ 썻던 방법인데 μ‹œκ°„μ΄ˆκ³Ό λ– μ„œ λͺ»ν•΄μ„œ μ΄λ²ˆμ—” μ•ˆμΌμ§€λ§Œ

nums = [0,0,0,0,0,0,0,0,0,0] λ₯Ό λ§Œλ“€κ³  

arrλ₯Ό 돌며 num[arr]을 ν•΄μ€€λ‹€

 * λ‹€λ§Œ μ—¬κΈ°μ„œ λ‚΄λ¦Όμ°¨μˆœ 정렬이기 λ•Œλ¬Έμ— num[9-i]

 * 반볡된 μˆ˜κ°€ λ‚˜μ˜¬ 경우λ₯Ό λŒ€λΉ„ν•΄ repeat(nums[i])

 

λ‚˜μ˜ 풀이 방법과 큰 속도차이가 λ‚˜μ§„ μ•ŠλŠ”λ‹€.

 

 

πŸ’™λ‚˜λŠ” λ‹¨μˆœνžˆ μ •λ ¬ = sort 해야지 라고 μƒκ°ν•˜λŠ”λ° , 이런 μ €λŸ° λ°©λ²•μœΌλ‘œ ν‘ΈλŠ” μ‚¬λžŒλ“€μ˜ 사고방식이 귀감이 λœλ‹€.

 

 


내풀이 (μ˜€λ‹΅)

const fs = require("fs");
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');


n = parseInt(input.shift());

numLst = Array(n).fill(0);

input.map((ele, i) => (numLst[ele] += 1));

numLst.map((ele, i) => {
  if (ele !== 0) {
    for (let j = 0; j < ele; j++) {
      console.log(i);
    }
  }
});

μž…λ ₯μˆ«μžλ²”μœ„κ°€ 크면 자꾸 μƒˆλ‘œμš΄ 방법이 ν•„μš”ν•˜λ‹€λŠ” 강박이 생겨 μ•„κΉŒ 배운 인덱슀λ₯΄ μ΄μš©ν•΄ ν•˜λŠ” 방법을 생가해 λ³΄μ•˜μ§€λ§Œ λ©”λͺ¨λ¦¬μ΄ˆκ³Ό 

 

 

근데 웬걸..

 

nodejs둜 λ§žμ€ μ‚¬λžŒμ—†λŠ”κ±° μ‹€ν™”μΈκ°€μš”...?

어쩐지...

μ•„λ¬΄νŠΌ μ•ˆλ©λ‹ˆλ‹€ λ…Έλ“œμ œμ΄μ—μŠ€λ‘œ!!!!

 

 

 

 


πŸ“Œ1931 νšŒμ˜μ‹€

www.acmicpc.net/problem/1931

 

1931번: νšŒμ˜μ‹€ λ°°μ •

(1,4), (5,7), (8,11), (12,14) λ₯Ό μ΄μš©ν•  수 μžˆλ‹€.

www.acmicpc.net

내풀이(μ˜€λ‹΅)

const fs = require("fs");
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');


n = input.shift();

let numLst = [];

input.map((ele, i) => {
  numLst.push(ele.split(" "));
});

numLst = numLst.sort((a, b) => a[1] - b[1]);

numLst = numLst.sort((a, b) => a[0] - b[0]);

let startTime = 0;
let endTime = 0;

let cnt = 0;
for (let i = 0; i < numLst.length; i++){
    if (startTime >= numLst[i][0]) {
        cnt += 1
        endTime = numLst[i][1];
    }
}

회의 λλ‚˜λŠ” μ‹œκ°„ -> 회의 μ‹œμž‘ν•˜λŠ” μ‹œκ°„μœΌλ‘œ μ •λ ¬ν•œ ν›„ 

회의 λλ‚˜λŠ” μ‹œκ°„>-= μ‹œμž‘ν•˜λŠ” μ‹œκ°„ 의 경우λ₯Ό μ„Έλ €κ³  ν•˜λ‹€κ°€ 였λ₯˜λ₯Ό λ°œκ²¬ν–ˆλŠλ°

μ΄λŸ°μ‹μœΌλ‘œ μ •λ ¬ν•˜λ©΄ 두가지 κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•˜λŠ”κ²ƒμ΄ μ•„λ‹ˆλΌ, 

λ§ˆμ§€λ§‰ κΈ°μ€€μœΌλ‘œλ§Œ 정렬이 λ˜λŠ” κ²ƒμ΄μ—ˆλ‹€.!!!!!

 

 

⭐️ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 닀쀑쑰건 sort

[[1,2] , [3,4]] 의 λ°°μ—΄  λ‘λ²ˆμ§Έμš”μ†Œ=> 첫번재 μš”μ†Œ 둜 μ •λ ¬ν•˜κΈ°

sorted_list = input.sort((a, b) => {
  if (a[1] > b[1]) return -1;
  if (a[1] < b[1]) return 1;
  if (a[0] > b[0]) return -1;
  if (a[0] < b[0]) return 1;
  return 0;
});

βš οΈμ—¬κΈ°μ„œ μ£Όμ˜ν• μ  !

μ§€κΈˆ input은 λ¬Έμžμ—΄μ΄κΈ° λ•Œλ¬Έμ— parseIntλ₯Ό 해주지 μ•ŠμœΌλ©΄ 문자 μœ λ‹ˆμ½”λ“œλ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•˜κΈ°

λ•Œλ¬Έμ— νƒ€μž…μ΄ 무엇인지 μ •ν™•νžˆ 확인해야 ν•œλ‹€.

 

 

λ‚΄ 풀이

const fs = require("fs");
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');


n = input.shift();

let numLst = [];
input.map((ele, i) => {
  numLst.push(ele.split(" "));
});

//2가지 κΈ°μ€€ μ •λ ¬
numLst = numLst.sort(function (a, b) {
  if (parseInt(a[1]) > parseInt(b[1])) return 1;
  if (parseInt(a[1]) < parseInt(b[1])) return -1;
  if (parseInt(a[0]) > parseInt(b[0])) return 1;
  if (parseInt(a[0]) < parseInt(b[0])) return -1;
  return 0;
});

//회의끝<=νšŒμ˜μ‹œμž‘
let endTime = 0;
let cnt = 0;
for (let i = 0; i < numLst.length; i++) {
  if (endTime <= parseInt(numLst[i][0])) {
    cnt += 1;
    endTime = parseInt(numLst[i][1]);
  }
}
console.log(cnt);

 

1) 2가지 κΈ°μ€€μœΌλ‘œ μ •λ ¬ (νšŒμ˜λλ‚˜λŠ” μ‹œκ°„ -> 회의 μ‹œμž‘ν•˜λŠ” μ‹œκ°„)

2) 회의 λλ‚˜λŠ” μ‹œκ°„μ΄ μ‹œμž‘ν•˜λŠ” μ‹œκ°„λ³΄λ‹€ μž‘κ±°λ‚˜ 같은 경우 (회의 κ°€λŠ₯ ) 으둜 μ •ν•˜κ³  μ…ˆ!

 

λ‹€λ₯Έ 풀이

let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n')

input.shift()
input = input.map(v => v.split(' ').map(v => +v)).sort((a, b) => a[1]-b[1] || a[0]-b[0])

let [time, answer] = [0, 0]
for (let [s, e] of input)
    if (time <= s) {
        time = e
        answer++
    }
console.log(answer)

세상에

* split & int 둜 λ°”κΎΈκΈ° & 닀쀑쑰건 배열이 ν•œλ²ˆμ— λœλ‹€λ‹ˆ...

* forλ¬Έμ—μ„œ λ³€μˆ˜ 2개둜 돌릴 수 μžˆλ‹€λ‹ˆ...

* λ³€μˆ˜λ„ ν•œλ²ˆμ— 생성, μ΄ˆκΈ°ν™” ν•  수 μžˆλ‹€λ‹ˆ...

 

λ§Žμ€ 것을 μ•Œ 게 된 고수의 μ½”λ“œμ˜€λ‹€.

 

 

πŸ’™ JSλ₯Ό 자유자재둜 λ‹€λ£¨λŠ” μ‚¬λžŒμ΄ 되자..