[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;
}