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

[Java Script] ํ–„๋ฒ„๊ฑฐ ๋งŒ๋“ค๊ธฐ ํ’€์ด(ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_๋ ˆ๋ฒจ1) with replace ์‹œ๊ฐ„๋ณต์žก๋„ ํ•ด๊ฒฐ

by ๋‰ด์ชผ๋ฏธ 2023. 12. 19.

[Java Script] ํ–„๋ฒ„๊ฑฐ ๋งŒ๋“ค๊ธฐ ํ’€์ด

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_๋ ˆ๋ฒจ1

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/133502

 

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

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

 

๐Ÿ“Œ ๋ฌธ์ œ

 

 

 

๋ฌธ์ œ ์„ค๋ช…

ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ์—์„œ ์ผ์„ ํ•˜๋Š” ์ƒ์ˆ˜๋Š” ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๋Š” ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•จ๊ป˜ ์ผ์„ ํ•˜๋Š” ๋‹ค๋ฅธ ์ง์›๋“ค์ด ํ–„๋ฒ„๊ฑฐ์— ๋“ค์–ด๊ฐˆ ์žฌ๋ฃŒ๋ฅผ ์กฐ๋ฆฌํ•ด ์ฃผ๋ฉด ์กฐ๋ฆฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ƒ์ˆ˜์˜ ์•ž์— ์•„๋ž˜์„œ๋ถ€ํ„ฐ ์œ„๋กœ ์Œ“์ด๊ฒŒ ๋˜๊ณ , ์ƒ์ˆ˜๋Š” ์ˆœ์„œ์— ๋งž๊ฒŒ ์Œ“์—ฌ์„œ ์™„์„ฑ๋œ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋”ฐ๋กœ ์˜ฎ๊ฒจ ํฌ์žฅ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ƒ์ˆ˜๊ฐ€ ์ผํ•˜๋Š” ๊ฐ€๊ฒŒ๋Š” ์ •ํ•ด์ง„ ์ˆœ์„œ(์•„๋ž˜์„œ๋ถ€ํ„ฐ, ๋นต์•ผ์ฑ„๊ณ ๊ธฐ - ๋นต)๋กœ ์Œ“์ธ ํ–„๋ฒ„๊ฑฐ๋งŒ ํฌ์žฅ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์ˆ˜๋Š” ์†์ด ๊ต‰์žฅํžˆ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์ˆ˜๊ฐ€ ํฌ์žฅํ•˜๋Š” ๋™์•ˆ ์† ์žฌ๋ฃŒ๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์ผ์€ ์—†์œผ๋ฉฐ, ์žฌ๋ฃŒ์˜ ๋†’์ด๋Š” ๋ฌด์‹œํ•˜์—ฌ ์žฌ๋ฃŒ๊ฐ€ ๋†’์ด ์Œ“์—ฌ์„œ ์ผ์ด ํž˜๋“ค์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ์ˆ˜์˜ ์•ž์— ์Œ“์ด๋Š” ์žฌ๋ฃŒ์˜ ์ˆœ์„œ๊ฐ€ [์•ผ์ฑ„, ๋นต, ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ, ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ, ๋นต]์ผ ๋•Œ, ์ƒ์ˆ˜๋Š” ์—ฌ์„ฏ ๋ฒˆ์งธ ์žฌ๋ฃŒ๊ฐ€ ์Œ“์˜€์„ ๋•Œ, ์„ธ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ถ€ํ„ฐ ์—ฌ์„ฏ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๊ณ , ์•„ํ™‰ ๋ฒˆ์งธ ์žฌ๋ฃŒ๊ฐ€ ์Œ“์˜€์„ ๋•Œ, ๋‘ ๋ฒˆ์งธ ์žฌ๋ฃŒ์™€ ์ผ๊ณฑ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ถ€ํ„ฐ ์•„ํ™‰ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, 2๊ฐœ์˜ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ƒ์ˆ˜์—๊ฒŒ ์ „ํ•ด์ง€๋Š” ์žฌ๋ฃŒ์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด ingredient๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ƒ์ˆ˜๊ฐ€ ํฌ์žฅํ•˜๋Š” ํ–„๋ฒ„๊ฑฐ์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์‹œ์˜ค.

 

 

์ œํ•œ์‚ฌํ•ญ

  • 1 ≤ ingredient์˜ ๊ธธ์ด ≤ 1,000,000
  • ingredient์˜ ์›์†Œ๋Š” 1, 2, 3 ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’์ด๋ฉฐ, ์ˆœ์„œ๋Œ€๋กœ ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

ingredient result
[2, 1, 1, 2, 3, 1, 2, 3, 1] 2
[1, 3, 2, 1, 2, 1, 3, 1, 2] 0

 

 

 

๐Ÿ’ก ๋ฌธ์ œํ’€์ด

 

1. ์ดˆ๊ธฐ ์ ‘๊ทผ ํ’€์ด_์‹คํŒจ

์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ๋ช‡๊ฐ€์ง€ ์ผ€์ด์Šค์—์„œ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค.

์›์ธ์„ ์ฐพ๊ธฐ์œ„ํ•ด ํ™•์ธํ•ด๋ณด๋‹ˆ replace๋กœ ์ธํ•ด ์‹œ๊ฐ„์ดˆ๊ณผ์˜€๋‹ค.

 

repalce๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ๋Œ๋ฉด์„œ ํ•ด๋‹น๊ฐ’์„ ์ฐพ๊ณ  ๋‹ค์‹œ ์‚ญ์ œ ํ•˜๊ธฐ์œ„ํ•ด ์ˆœ์ฐจ์ ์œผ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n)์œผ๋กœ ์—ฌ๊ธฐ์„œ n์€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ์ด๋‹ค.  

์•„๋ž˜์˜ ์ฝ”๋“œ์—์„œ๋Š” while ๋ฃจํ”„์—์„œ replace ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ„์† ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n^2)๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฌธ์ž์—ด์—์„œ ํŒจํ„ด์„ ์ฐพ์•„ ์ œ๊ฑฐํ•œ ํ›„์—๋„, ์ œ๊ฑฐ๋œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ›‘์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

//1231 ์ด ๋ฉด ํ•ด๋‹น ์š”์†Œ ์‚ญ์ œ ์‚ญ์ œํ•œ ๋ฐฐ์—ด์—์„œ 1231 ์ด๋ฉด ๋˜ ์‚ญ์ œ ๋งŒ์•ฝ ์—†์œผ๋ฉด ๋ฆฌํ„ด 0
function solution(ingredient) {
    var answer = 0;
    let buger = ingredient.join("");
    let regex = /1231/;
    
    while(true) {
        let check = buger.length;
        buger = buger.replace(regex, '');
        
        if(buger.length == check){ 
            return answer;
        }else{
            answer++;
        }
    }
    
    return answer;
}

 

 

๊ทธ๋ž˜์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ด์„œ ์ดˆ๊ธฐ ์ ‘๊ทผ๋ฐฉ๋ฒ•์ธ ์ •๊ทœํ‘œํ˜„์‹์˜ ์ ‘๊ทผ๋ฐฉ์‹์—์„œ ๋ฐ”๊ฟ”์•ผํ–ˆ๋‹ค. 

 

์ ‘๊ทผ๋ฐฉ์‹

์˜ค๋žœ์‹œ๊ฐ„ ๊ณ ๋ฏผํ•ด๋ณด๊ณ  ํ–ˆ์œผ๋‚˜ ๋„๋ฌด์ง€ ๊ฐ์ด ์˜ค์ง€์•Š์•„ ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•˜๋‹ค๊ฐ€ ์ œ์ผ ํ•ฉ๋ฆฌ์ ์ธ๊ฑฐ ๊ฐ™์€ ํ’€์ด๋ฅผ ํ•ด์„ํ•ด์„œ ์ ์šฉํ–ˆ๋‹ค.

 

1. ์Šคํƒ์„ ํ™œ์šฉํ•˜๊ธฐ๋กœํ–ˆ๋‹ค. ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด์ฃผ๊ณ  ๊ทธ ๊ธธ์ด๊ฐ€ 4์ด์ƒ์ด ๋˜๋ฉด ๊ทธ๋•Œ๋ถ€ํ„ฐ ํŒจํ„ด๊ณผ ๋น„๊ตํ•ด์ค„๊ฑฐ๋‹ค.

 

2. ์ด ๋ฐฉ๋ฒ•์ด ์™œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์—ฌ์ฃผ๋ƒ๋ฉด, ๋งจ์•ž์— ์žˆ๋Š” ๋ฐฐ์—ด์„ ๋นผ๋ฒ„๋ฆฌ๋ฉด ์—”์ง„์€ ์•ž์— ์žˆ๋Š” ๋ฐฐ์—ด์„ ๋นผ๊ณ  ๊ทธ ์ž๋ฆฌ์— ๋’ค์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์ฃผ๊ณ ๋ฅผ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณต์„ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒˆ๋กญ๊ฒŒ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐฐ์—ด์„ ๋‹ค์‹œ ๋„ฃ์–ด์ฃผ๊ณ  ํŒจํ„ด๊ณผ ๋งž์œผ๋ฉด ๋’ค์—์„œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๋นผ๊ธฐ์œ„ํ•ด ๊ตณ์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋Œ๋ฉด์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ๋ฉด์„œ ํŒจํ„ด๊ณผ ๋น„๊ตํ• ๊ฑฐ๋‹ค.

 

3. input ์ด๋ผ๋Š” ๋ฐฐ์—ด์— ํ•„์š”์—†์–ด์ง„ ์žฌ๋ฃŒ๋“ค๋„ ์Œ“์ด๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์—์„œ ๋ถ€ํ„ฐ 4์ž๋ฆฌ๋งŒ ๋น„๊ตํ•ด์ฃผ๊ธฐ์œ„ํ•ด slice๋กœ 4์ž๋ฆฌ์”ฉ๋งŒ ์ž˜๋ผ์„œ ๋น„๊ตํ•ด์•ผํ•œ๋‹ค.

function solution(ingredient) {
    let answer = 0;
    let input = [];
    let pattern = '1231';
    
    for(let i = 0; i < ingredient.length; i++) {
        input.push(ingredient[i]);
        if(input.length >= 4){
            let temp = input.slice(-4).join('');
            if(temp == pattern) {
                answer++;
                input.splice(-4);
            }
        }
    }
    return answer;
}

 

 

 

 

์ฐธ๊ณ 

ํ–„๋ฒ„๊ฑฐ ๋งŒ๋“ค๊ธฐ