whatisthis?

โŒ๋ฐฑ์ค€ 3052 javascript (node.js) ํ’€์ด ๋ณธ๋ฌธ

ALGORITHM/BOJ (Node.js)

โŒ๋ฐฑ์ค€ 3052 javascript (node.js) ํ’€์ด

thisisyjin 2022. 1. 4. 11:10

1์ฐจ์› ๋ฐฐ์—ด - (4)

 

 


 

๐Ÿ’ก๋ฌธ์ œ

๋‘ ์ž์—ฐ์ˆ˜ A์™€ B๊ฐ€ ์žˆ์„ ๋•Œ, A%B๋Š” A๋ฅผ B๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 7, 14, 27, 38์„ 3์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋Š” 1, 2, 0, 2์ด๋‹ค.  ์ˆ˜ 10๊ฐœ๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๋’ค, ์ด๋ฅผ 42๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์ด ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ“์ž…๋ ฅ

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ ์—ด๋ฒˆ์งธ ์ค„ ๊นŒ์ง€ ์ˆซ์ž๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ด ์ˆซ์ž๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๊ณ , ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜์ด๋‹ค.

๐Ÿ“ˆ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์—, 42๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ, ์„œ๋กœ ๋‹ค๋ฅธ ๋‚˜๋จธ์ง€๊ฐ€ ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ

39
40
41
42
43
44
82
83
84
85

 

์˜ˆ์ œ ์ถœ๋ ฅ

6

๊ฐ ์ˆ˜๋ฅผ 42๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋Š” 39, 40, 41, 0, 1, 2, 40, 41, 0, 1์ด๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์€ 6๊ฐœ๊ฐ€ ์žˆ๋‹ค.

 

 


< ์ฝ”๋“œ >

 

let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(x => Number(x));
let numArr = [];

input.forEach(x => {
   const num = x % 42;

   if(numArr.indexOf(num) === -1) { // ์—†๋Š” ๊ฐ’์ด๋ผ๋ฉด
      numArr.push(num);             // ๋ฐฐ์—ด์— push
   }
});

console.log(numArr.length);      // ์„œ๋กœ๋‹ค๋ฅธ ๊ฐ’์ด ์ €์žฅ๋œ ๋ฐฐ์—ด์ด๋ฏ€๋กœ

<KEY POINT>

  • ์„œ๋กœ๋‹ค๋ฅธ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„  ๋ฐฐ์—ด(Array)์˜ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๋‹ค.
  • ๋นˆ ๋ฐฐ์—ด[] ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ , input๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ forEach๋ฅผ ์จ์ค€๋‹ค.
  • 42๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๊ฐ’์„ num์ด๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•˜๊ณ , num๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด pushํ•œ๋‹ค.
  • >> ์ฆ‰, indexOf(num)์ด -1์ผ๋•Œ๋งŒ pushํ•œ๋‹ค. -1์ด ์•„๋‹ˆ๋ผ๋ฉด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ค‘๋ณต๋˜๋‹ˆ๊นŒ.
  • numArr์—๋Š” ์œ„ ์˜ˆ์ œ๋Œ€๋กœ๋ผ๋ฉด [39, 40, 41, 0, 1, 2] ์ด ์—ฌ์„ฏ๊ฐœ์˜ ๊ฐ’์ด ์กด์žฌ. - ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐœ์ˆ˜ length๋ฅผ ์ถœ๋ ฅ

 

 

๐Ÿ’ก indexOf๋ž€ ๋ฌด์—‡์ผ๊นŒ?

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

 

Array.prototype.indexOf() - JavaScript | MDN

indexOf() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์—์„œ ์ง€์ •๋œ ์š”์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

developer.mozilla.org

indexOf() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์—์„œ ์ง€์ •๋œ ์š”์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ 

์ง€์ •๋œ ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜

 

>> ๋งŒ์•ฝ [a, b, c, d, a, a, a]๋ผ๋Š” ๋ฐฐ์—ด์„ indexOf('a')ํ•œ๋‹ค๋ฉด?  >> result |  0

a๊ฐ€ 4๊ฐœ๋‚˜ ์กด์žฌํ•˜์ง€๋งŒ, ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ.

>> ๋งŒ์•ฝ, ๋‘๋ฒˆ์งธ a๋ฅผ ์ฐพ์œผ๋ ค๋ฉด? indexOf('a', 2)์™€ ๊ฐ™์ด ํ•ด์ค€๋‹ค. >> result |  4

 

 

 

 

๐Ÿ’ก ์™œ forEach๋ฅผ ์‚ฌ์šฉํ–ˆ์„๊นŒ?

forEach์˜ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ๋Š” '์ผํšŒ์„ฑ'์ด๋‹ค. map()์˜ ๊ฒฝ์šฐ์—๋Š” ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด๋ฒ„๋ฆฌ์ง€๋งŒ,

forEach๋Š” ๊ทธ๋ƒฅ ํŠน์ • ๋™์ž‘์„ ํ•˜๊ณ  ๋๋‚œ๋‹ค!

์œ„ ์ฝ”๋“œ์—๋Š” ๋นˆ ๋ฐฐ์—ด์ธ numArr์— pushํ•˜๋Š” ๋™์ž‘์„ '๊ฐ ์š”์†Œ๋งˆ๋‹ค' ํ•˜๊ณ ๋‚˜์„œ forEach๋ฌธ์€ ๋์ด ๋‚œ ๊ฒƒ์ด๋‹ค.

 

์œ„์—์„œ๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ–ˆ์ง€๋งŒ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•จ์ˆ˜๋ฅผ ์„ ์–ธ(ํ•จ์ˆ˜๋ช… ํฌํ•จ)ํ•ด์•ผํ•œ๋‹ค.

 

let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(x => Number(x));
let numArr = [];

input.forEach(function pushArray(x) {
   const num = x % 42;

   if(numArr.indexOf(num) === -1) { // ์—†๋Š” ๊ฐ’์ด๋ผ๋ฉด
      numArr.push(num);             // ๋ฐฐ์—ด์— push
   }
});

console.log(numArr.length);      // ์„œ๋กœ๋‹ค๋ฅธ ๊ฐ’์ด ์ €์žฅ๋œ ๋ฐฐ์—ด์ด๋ฏ€๋กœ

์ด๋Ÿฐ์‹์œผ๋กœ ํ•ด์•ผํ•จ. ์—ฌ๊ธฐ์„œ, x๋Š” ์ž…๋ ฅ๋ฐ›๋Š” ๊ฐ’, ์ฆ‰ ํŒŒ๋ผ๋ฏธํ„ฐ(parameter)์ด๋‹ค!

 

Parameter ๋งค๊ฐœ๋ณ€์ˆ˜ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ ์ž…๋ ฅ ๋ณ€์ˆ˜(Variable) ๋ช…
Argument ์ „๋‹ฌ์ธ์ž, ์ธ์ž ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ์˜ ์ž…๋ ฅ ๊ฐ’(Value)

 

 

์ด๋ฒˆ ๋ฌธ์ œ์—์„œ ์ค‘์š” ํฌ์ธํŠธ๋“ค์— ๋Œ€ํ•ด ์•„๋ž˜ ํฌ์ŠคํŒ…๋“ค์—์„œ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

** Array.indexOf()

https://mywebproject.tistory.com/221

** Array.forEach()

https://mywebproject.tistory.com/220

 

 

 

๐Ÿ”ปํ‹€๋ฆฐ ์ฝ”๋“œ๋“ค๐Ÿ”ป

 

#1. ํ‹€๋ฆผ

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n').map(x => Number(x));
let count = 0;

for(let i=0;i<10;i++) {
   for(let j=i+1;j<10;j++){
      if(input[i] % 42 != input[j] % 42) {
         count++;
      }
   }
}
console.log(count);

 

#2. Type Error

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n').trim().map(x => Number(x));
let count = 0;

for(let i=0;i<10;i++) {
   for(let j=i+1;j<10;j++){
      if(input[i] % 42 != input[j] % 42) {
         count++;
      }
   }
}
console.log(count);

>> ํ˜น์‹œ ๋ชฐ๋ผ trim()์„ ํ•ด์คฌ๋Š”๋ฐ trim()์€ toString()๋’ค, ์ฆ‰ split ์•ž์— ์จ์ค˜์•ผ ํ•œ๋‹ค. (๊ณต๋ฐฑ ์—†์• ๊ณ  ๋‚˜์„œ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์•ผํ•จ)