๐Ÿ“œ ๋ชฉ์ฐจ

์•Œ๊ณ ๋ฆฌ์ฆ˜

์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ

์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’

NestJS

CRUD

Analyzer

Autocomplete

์•Œ๊ณ ๋ฆฌ์ฆ˜

๐Ÿ’ญ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ

// ๊ด„ํ˜ธ๊ฐ€ ๋ฐ”๋ฅด๊ฒŒ ์ง์ง€์–ด์กŒ๋‹ค๋Š” ๊ฒƒ์€ '(' ๋ฌธ์ž๋กœ ์—ด๋ ธ์œผ๋ฉด ๋ฐ˜๋“œ์‹œ ์ง์ง€์–ด์„œ ')' ๋ฌธ์ž๋กœ ๋‹ซํ˜€์•ผ ํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
/*
"()()" ๋˜๋Š” "(())()" ๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์ž…๋‹ˆ๋‹ค.
")()(" ๋˜๋Š” "(()(" ๋Š” ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ์ž…๋‹ˆ๋‹ค.
*/

// '(' ๋˜๋Š” ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, 
// ๋ฌธ์ž์—ด s๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์ด๋ฉด true๋ฅผ return ํ•˜๊ณ , 
// ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ์ด๋ฉด false๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

// ๋ฌธ์ž์—ด s์˜ ๊ธธ์ด : 100,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
// ๋ฌธ์ž์—ด s๋Š” '(' ๋˜๋Š” ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

// ๋‚ด ์ฝ”๋“œ~ ํšจ์œจ์„ฑ ํ†ต๊ณผ ๋ชปํ–ˆ๋‹ค ์™€์ด?
function solution(s){
    let answer = true
    const arr = s.split("")
    const result = {}
    arr.forEach((x) => {
        result[x] = (result[x] || 0) + 1
    })

    // "(" ๋กœ ์‹œ์ž‘ ์•ˆํ•˜๊ฑฐ๋‚˜ ")" ๋กœ ์•ˆ ๋๋‚˜๋ฉด false
    if(s[0] !== "(" || s[s.length-1] !== ")") return false		
		// "(" ์™€ ")"์˜ ์ด ํ•ฉ ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋ฉด false
    if(result['('] !== result[')']) return false

		
  return answer
}

// ๋ฉ˜ํ† ๋‹˜ ์ฝ”๋“œ 
// ํšจ์œจ์„ฑ์—์„œ ์‹คํŒจ! ํ‘
function solution(s){
    const limit = s.length/2
    for(let i = 0 ; i < limit ;i++){
        s = s.replace("()", "")
    }
    return s === ""
}

// ํšจ์œจ์„ฑ ํ†ต๊ณผํ•˜๋Š” ์ฝ”๋“œ
function solution(s){
    // ์ฒซ ๋ฌธ์ž์—ด์ด ๋‹ซํ˜€์žˆ๊ฑฐ๋‚˜ ๋งˆ์ง€๋ง‰์ด ์—ด๋ ค์žˆ๋‹ค๋ฉด false
    if(s[0] ===")" || s[s.length -1] === "(") return false
    
    let depth = 0  // ์œ„์—์„œ ์ฒซ๋ฒˆ์งธ ๊ฐ’์ด "("์ด ์•„๋‹Œ ๊ฒฝ์šฐ ๋‹ค ์žก์•„์„œ depth, i๋ฅผ 1๋กœ ์„ค์ •ํ•ด๋„ ํ†ต๊ณผ
    for (let i = 0 ; i < s.length; i++){
        // ์—ด๋ ค์žˆ๋‹ค๋ฉด 1์„ ๋”ํ•œ๋‹ค
        if( s[i] === "(" ) depth++
        else if (s[i] === ")"){
        // ๋‹ซํ˜€์žˆ๋‹ค๋ฉด 1์„ ๋บ€๋‹ค
            depth--
            if (depth < 0) return false
        }
    }
    return depth === 0
}

// reduce()์™€ ์Šค์œ„์น˜ ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•œ ํ’€์ด 
function solution(s){
    // ์ฒซ ๋ฌธ์ž์—ด์ด ๋‹ซํ˜€์žˆ๊ฑฐ๋‚˜ ๋งˆ์ง€๋ง‰์ด ์—ด๋ ค์žˆ๋‹ค๋ฉด false
    if(s[0] ===")" || s[s.length -1] === "(") return false
    
    let fail = false
    const answer = s.split(""). reduce( ( acc,cur )=>{ 
        if (acc < 0) {
            fail = true
        }
        return acc + ( cur === "(" ? 1 : -1)
    }, 0)
    return answer === 0 && !fail  
}

๐Ÿ’ญ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’

// ๋ฌธ์ž์—ด s์—๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ์ˆซ์ž๋“ค์ด ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. 
// str์— ๋‚˜ํƒ€๋‚˜๋Š” ์ˆซ์ž ์ค‘ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’์„ ์ฐพ์•„ ์ด๋ฅผ "(์ตœ์†Œ๊ฐ’) (์ตœ๋Œ€๊ฐ’)"ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, 
// solution์„ ์™„์„ฑํ•˜์„ธ์š”.
// ์˜ˆ๋ฅผ๋“ค์–ด s๊ฐ€ "1 2 3 4"๋ผ๋ฉด "1 4"๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ , "-1 -2 -3 -4"๋ผ๋ฉด "-4 -1"์„ ๋ฆฌํ„ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

// s์—๋Š” ๋‘˜ ์ด์ƒ์˜ ์ •์ˆ˜๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

// ๋‚ด ์ฝ”๋“œ! 
function solution(s){
  const arr = s.split(" ")
  let max = Math.max(...arr)
  let min = Math.min(...arr) 
  
  return max.toString() + " " + min.toString()
}

// ๋ฉ˜ํ† ๋‹˜ ์ฝ”๋“œ~ 
function solution(s){
    s+= " "
    let [min, max] = [ 0,0 ]
    let str = ""
    for(let i = 0; i<s.length; i++){
        if(s[i] === " "){
            str = Number(str)
            if(min === 0 || max ===0 ){
                // ๊ธฐ์ค€์  ๊ตฌํ•˜๊ธฐ(๊ฐ€์žฅ ๋จผ์ € ๊ฐ€์ ธ์˜ค๋Š” ์ˆซ์ž)
                [ min, max ] = [ str, str ]
            } else {
                // ๋‘๋ฒˆ์งธ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๋Š” ์ˆซ์ž
                min = str < min ? str : min
                max = str > max ? str : max
            }
            str = ""
            continue
        }
        str+=s[i]
    }
    return min + " "+max
}

NestJS


1. CRUD

<aside> ๐Ÿค“ ElasticSearch ๋ฅผ ์‹คํ–‰ํ•ด์„œ CRUD ์‹ค์Šต์„ ํ•ด๋ณด์ž!

</aside>

ElasticSearch ์ฐธ๊ณ  ์‚ฌ์ดํŠธ

Elastic ๊ฐ€์ด๋“œ ๋ถ


๐Ÿ’ปย  ์‹ค์Šต - CRUD ์‹ค์Šต

  1. docker-compose.yaml ์—์„œ logstash ์ฃผ์„ ์‹œํ‚ค๊ณ  ๋นŒ๋“œ ์ดํ›„ ๋„์ปค ๋„์šฐ๊ธฐ
  2. postman ์—์„œ ํ™•์ธ

Untitled