๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ(JavaScript)

by ๋‰ด์ชผ๋ฏธ 2026. 3. 18.

https://school.programmers.co.kr/learn/courses/30/lessons/12909?utm_source=chatgpt.com

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ, ์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํžˆ ๊ด„ํ˜ธ์˜ ๊ฐœ์ˆ˜๋งŒ ๋งž์œผ๋ฉด ๋˜๋Š” ์ค„ ์•Œ์•˜๋‹ค.
ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ๊ฐœ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ˆœ์„œ์˜€๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋‚ด๊ฐ€ ์ฒ˜์Œ์— ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ–ˆ๊ณ , ์–ด๋–ค ๋ถ€๋ถ„์„ ์ž˜๋ชป ์งš์—ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์™œ ์ˆ˜์ •์ด ํ•„์š”ํ•œ์ง€ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

๋ฌธ์ œ ์ดํ•ด

๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ด„ํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง์ง€์–ด์กŒ๋Š”์ง€ ํŒ๋‹จํ•ด์„œ true ๋˜๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด:

  • "()()" → true
  • "(())()" → true
  • ")()(" → false
  • "(()(" → false

์ฒ˜์Œ ๋ณด๋ฉด ( ๊ฐœ์ˆ˜์™€ ) ๊ฐœ์ˆ˜๋งŒ ๊ฐ™์œผ๋ฉด ๋  ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋ฉด ์•ˆ ๋œ๋‹ค.

 

์ฆ‰,

  • ์ตœ์ข… ๊ฐœ์ˆ˜๋„ ๋งž์•„์•ผ ํ•˜๊ณ 
  • ์ค‘๊ฐ„ ๊ณผ์ •์—์„œ๋„ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค

์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

 


์ฒ˜์Œ ์ž‘์„ฑํ–ˆ๋˜ ์ฝ”๋“œ

๋‚ด๊ฐ€ ์ฒ˜์Œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

function solution(s){
    var answer = true;

    console.log('Hello Javascript')
    let score = 0;
    s.split('').forEach((item) => {
        if(item === '(') {
            score += 1;
        }else if(item === ')') {
            score -= 1;
        }
    })

    return score === 0 ? true : false;
}

์ฒ˜์Œ ์ƒ๊ฐ์€ ๋‹จ์ˆœํ–ˆ๋‹ค.

  • ( ์ด๋ฉด +1
  • ) ์ด๋ฉด -1
  • ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ๊ฐ€ 0์ด๋ฉด ์ง์ด ๋งž๋Š” ๊ฒƒ

์™œ ์ด ์ฝ”๋“œ๊ฐ€ ํ‹€๋ ธ๋Š”๊ฐ€

์ด ์ฝ”๋“œ๋Š” ์ตœ์ข… ํ•ฉ๊ณ„๋งŒ ๊ฒ€์‚ฌํ•œ๋‹ค.
์ฆ‰, ๊ด„ํ˜ธ์˜ ๊ฐœ์ˆ˜๋งŒ ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋Š” ์ˆœ์„œ๋„ ์ค‘์š”ํ•˜๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ")("๋ฅผ ๋ณด์ž.

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ณ„์‚ฐํ•˜๋ฉด

  • ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž ) → score = -1
  • ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž ( → score = 0

์ตœ์ข…์ ์œผ๋กœ score === 0 ์ด๋ฏ€๋กœ true๊ฐ€ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ")("๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ๊ฐ€ ์•„๋‹ˆ๋‹ค.
์‹œ์ž‘๋ถ€ํ„ฐ ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋จผ์ € ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฆ‰, ๋‚ด๊ฐ€ ๋†“์นœ ํ•ต์‹ฌ์€ ์ด๊ฒƒ์ด๋‹ค.

๊ด„ํ˜ธ ๋ฌธ์ œ๋Š” ๋งˆ์ง€๋ง‰ ๊ฐœ์ˆ˜๋งŒ ๋งž๋Š”๋‹ค๊ณ  ๋์ด ์•„๋‹ˆ๋ผ, ์ค‘๊ฐ„ ๊ณผ์ •์—์„œ๋„ ์ ˆ๋Œ€ ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋” ๋งŽ์•„์ง€๋ฉด ์•ˆ ๋œ๋‹ค.

ํ•ต์‹ฌ ์•„์ด๋””์–ด

์ด ๋ฌธ์ œ๋Š” score๋ฅผ ์ด์šฉํ•ด ํ’€ ์ˆ˜ ์žˆ๋‹ค.

  • ( ๋ฅผ ๋งŒ๋‚˜๋ฉด score += 1
  • ) ๋ฅผ ๋งŒ๋‚˜๋ฉด score -= 1

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์กฐ๊ฑด์ด ํ•˜๋‚˜ ๋” ์žˆ๋‹ค.

์ค‘๊ฐ„์— score < 0 ์ด ๋˜๋ฉด ๋ฐ”๋กœ false

์ด ์˜๋ฏธ๋Š” ๊ณง:

  • ์ง€๊ธˆ๊นŒ์ง€ ๋‚˜์˜จ ๊ด„ํ˜ธ ์ค‘์—์„œ
  • ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ์—ฌ๋Š” ๊ด„ํ˜ธ๋ณด๋‹ค ๋งŽ์•„์กŒ๋‹ค๋Š” ๋œป

์ฆ‰, ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋Š” ์˜๋ฏธ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ž์—ด์„ ๋๊นŒ์ง€ ๋‹ค ๋Œ์•˜์„ ๋•Œ:

  • score === 0 ์ด๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ
  • ์•„๋‹ˆ๋ฉด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ

์ˆ˜์ •ํ•œ ์ •๋‹ต ์ฝ”๋“œ

function solution(s) {
    let score = 0;

    for (const ch of s) {
        if (ch === '(') {
            score += 1;
        } else {
            score -= 1;
        }

        if (score < 0) {
            return false;
        }
    }

    return score === 0;
}

์™œ forEach๋ณด๋‹ค for...of๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€

์ฒ˜์Œ์—๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์ž‘์„ฑํ–ˆ๋‹ค.

 
s.split('').forEach((item) => {
...
});
 

์ด ๋ฐฉ์‹๋„ ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์ด ๋ฌธ์ œ์—์„œ๋Š” for...of๊ฐ€ ๋” ์ ํ•ฉํ•˜๋‹ค.

1. split('')๋Š” ๋ฐฐ์—ด์„ ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค

split('')๋Š” ๋ฌธ์ž์—ด์„ ๋ฌธ์ž ๋ฐฐ์—ด๋กœ ๋ฐ”๊พผ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด:

 
"abc".split('')
 

๊ฒฐ๊ณผ:['a', 'b', 'c']



์ฆ‰, ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๊ธฐ ์ „์— ๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ ๋” ์ƒ์„ฑํ•œ๋‹ค.

๋ฐ˜๋ฉด for...of๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ”๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

 
for (const ch of s) {
...
}
 

๋ถˆํ•„์š”ํ•œ ๋ฐฐ์—ด ์ƒ์„ฑ์ด ์—†์–ด์„œ ๋” ๊น”๋”ํ•˜๋‹ค.

 


๋‚ด๊ฐ€ ์ž˜๋ชป ์งš์—ˆ๋˜ ๋ถ€๋ถ„ ์งง์€ ํšŒ๊ณ 

์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๋‚˜๋Š” **“๊ด„ํ˜ธ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์œผ๋ฉด ๋œ๋‹ค”**๋Š” ์ชฝ์— ๋จผ์ € ์‹œ์„ ์ด ๊ฐ”๋‹ค.
๊ฒ‰์œผ๋กœ ๋ณด๊ธฐ์—” ๋งž๋Š” ์ ‘๊ทผ์ฒ˜๋Ÿผ ๋ณด์˜€์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๋ฌธ์ œ์˜ ๋ณธ์งˆ์„ ์ ˆ๋ฐ˜๋งŒ ๋ณธ ์…ˆ์ด์—ˆ๋‹ค.

ํŠนํžˆ score === 0 ๋งŒ ํ™•์ธํ•˜๊ณ  ๋๋‚ธ ๊ฒƒ์€,
๋ฌธ์ œ๋ฅผ ๊ฒฐ๊ณผ ์ค‘์‹ฌ์œผ๋กœ๋งŒ ๋ณด๊ณ  ๊ณผ์ • ๊ฒ€์ฆ์„ ๋†“์นœ ๊ฒƒ์ด์—ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ๋А๋‚€ ์ ์€:

  • ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ๋Š” ์ตœ์ข… ๊ฒฐ๊ณผ๋งŒ ๋งž๋Š”์ง€๊ฐ€ ์•„๋‹ˆ๋ผ
  • ์ค‘๊ฐ„ ๊ณผ์ •์—์„œ ๊นจ์ง€๋Š” ์กฐ๊ฑด์ด ์—†๋Š”์ง€๋ฅผ ๊ฐ™์ด ๋ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ

์ด๋‹ค.

์•ž์œผ๋กœ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋Š”
“๋งˆ์ง€๋ง‰ ์ƒํƒœ๋งŒ ๋ณด๋ฉด ๋˜๋Š”๊ฐ€?”
์•„๋‹ˆ๋ฉด
“์ค‘๊ฐ„ ๊ณผ์ •์—์„œ๋„ ํ•ญ์ƒ ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์ด ์žˆ๋Š”๊ฐ€?”
๋ฅผ ๋จผ์ € ์ฒดํฌํ•ด์•ผ๊ฒ ๋‹ค.

์งง์€ ๋ฌธ์ œ์˜€์ง€๋งŒ, ๊ตฌํ˜„ ๋ฌธ์ œ๋ฅผ ๋ณผ ๋•Œ์˜ ์‹œ์•ผ๋ฅผ ๋‹ค์‹œ ์žก์•„์ค€ ์ข‹์€ ๋ฌธ์ œ์˜€๋‹ค.