๋ฌธ์ ์ค๋ช
์กฐ์ด์คํฑ์ผ๋ก ์ํ๋ฒณ ์ด๋ฆ์ ์์ฑํ์ธ์. ๋งจ ์ฒ์์ A๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
ex) ์์ฑํด์ผ ํ๋ ์ด๋ฆ์ด ์ธ ๊ธ์๋ฉด AAA, ๋ค ๊ธ์๋ฉด AAAA
์กฐ์ด์คํฑ์ ๊ฐ ๋ฐฉํฅ์ผ๋ก ์์ง์ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
โฒ - ๋ค์ ์ํ๋ฒณ โผ - ์ด์ ์ํ๋ฒณ (A์์ ์๋์ชฝ์ผ๋ก ์ด๋ํ๋ฉด Z๋ก) โ - ์ปค์๋ฅผ ์ผ์ชฝ์ผ๋ก ์ด๋ (์ฒซ ๋ฒ์งธ ์์น์์ ์ผ์ชฝ์ผ๋ก ์ด๋ํ๋ฉด ๋ง์ง๋ง ๋ฌธ์์ ์ปค์) โถ - ์ปค์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
์๋ฅผ ๋ค์ด ์๋์ ๋ฐฉ๋ฒ์ผ๋ก JAZ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ์์น์์ ์กฐ์ด์คํฑ์ ์๋ก 9๋ฒ ์กฐ์ํ์ฌ J๋ฅผ ์์ฑํฉ๋๋ค. - ์กฐ์ด์คํฑ์ ์ผ์ชฝ์ผ๋ก 1๋ฒ ์กฐ์ํ์ฌ ์ปค์๋ฅผ ๋ง์ง๋ง ๋ฌธ์ ์์น๋ก ์ด๋์ํต๋๋ค. - ๋ง์ง๋ง ์์น์์ ์กฐ์ด์คํฑ์ ์๋๋ก 1๋ฒ ์กฐ์ํ์ฌ Z๋ฅผ ์์ฑํฉ๋๋ค. ๋ฐ๋ผ์ 11๋ฒ ์ด๋์์ผ "JAZ"๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ด๋๊ฐ ์ต์ ์ด๋์ ๋๋ค.
๋ง๋ค๊ณ ์ ํ๋ ์ด๋ฆ name์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ด๋ฆ์ ๋ํด ์กฐ์ด์คํฑ ์กฐ์ ํ์์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ๋ง๋์ธ์.
์ ํ ์ฌํญ
- name์ ์ํ๋ฒณ ๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- name์ ๊ธธ์ด๋ 1 ์ด์ 20 ์ดํ์ ๋๋ค.
์ ์ถ๋ ฅ ์
JEROEN | 56 |
JAN | 23 |
function solution(name){
const arr = [0];
const answer = [...name].reduce( (answer, s, i) => {
// ๋ฌธ์์ด name์ ๋ฌธ์๊ฐ A์ด๋ฉด์, ๊ทธ ์ ๋ฌธ์๊ฐ A๊ฐ ์๋ ๊ฒฝ์ฐ
// ์ฆ, ์ฒ์์ผ๋ก ๋ฑ์ฅํ๋ A๋ผ๋ฉด
if(s === "A"){
// ์์ ๋ฐฐ์ด arr์ name์ i๋ฒ์งธ๋ถํฐ ๊ณ์ฐํ๋ continuous ํจ์ ์ฌ์ฉ
// ์ฐ์๋ A์ ๊ฐ์์์ A๊ฐ ์ฒ์์ผ๋ก ๋ฑ์ฅํ๋ ๋ถ๋ถ์ ์ธ๋ฑ์ค๋ฅผ ์ฐจ ์ฐ์ฐ
if(name[i-1] != "A")
arr.push(continue(name.substring(i)) - (i - 1));
// ํ ๋ฌธ์๋ฅผ ์ฐ์ฐ ํ ์ฐ์ธก ์ด๋์ผ๋ก ์ธํ + 1
return answer + 1;
}
// ํ์ฌ ์ด ํฉ์ + ์ํ๋ฒณ ๋ณํ(์ข์ฐ ์ด๋ํ ์) +์ฐ์ธก ์ด๋ํ ์
return answer + calc_diff(name, i) + 1;
}, 0);
return answer - Math.max(...arr) - 1;
}
function calc_diff(name, i){
// charCodeAt์ ์ฌ์ฉํ์ฌ '๋ฌธ์'๋ฅผ ์ ์๋ก ์์คํค์ฝ๋ ๋ฒํธ๋ก ๋ณํ
let diff = name.charCodeAt(i) - 65;
if(diff > 13)
diff = 26 - diff;
return diff;
}
// A๊ฐ ๋ช๋ฒ ๋ฐ๋ณต ๋์ด์๋์ง ํ์ธ
// "AAA" -> 3
function continue(name){
let repeat = 0;
// ๋ฌธ์ A๊ฐ ๋ํ๋์ง ์์ ๋๊น์ง A ๊ฐ์ ์นด์ดํธ ํ ๋ฐํ
for(let i = 0; i < name.length; i++){
if(name[i] != "A")
break;
repeat++;
}
return repeat;
}
๊ตฌํํด์ผ ํ ๊ฒ
- ํด๋น ์ํ๋ฒณ์ผ๋ก ๋ณํํ๊ธฐ ์ํด ํ์ํ ์ต์ ์ด๋ ์๋ ๋ช์ธ๊ฐ?
- ๋ฌธ์์ด ๋งจ ์์์ '์ข' ์ด๋์ ํตํด ๋ฌธ์์ด ๋งจ ๋ค๋ก ๊ฐ์ผํ๋ ๊ฒฝ์ฐ๋ ์ธ์ ์ธ๊ฐ?
์ฒซ๋ฒ์งธ๋ก ๊ตฌํํด์ผ ํ๋ ๊ฒ์ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์๋ค. ์์คํค์ฝ๋๋ฅผ ์ด์ฉํ์ฌ ๋ณํํด์ฃผ๋ฉด ๋
function calc_diff(name, i){
// charCodeAt์ ์ฌ์ฉํ์ฌ '๋ฌธ์'๋ฅผ ์ ์๋ก ์์คํค์ฝ๋ ๋ฒํธ๋ก ๋ณํ
let diff = name.charCodeAt(i) - 65;
if(diff > 13)
diff = 26 - diff;
return diff;
}
๋๋ฒ์งธ๋ก ๊ตฌํํด์ผ ํ๋ ๊ฒ์ ์ธ์ ์ข๋ก ์ด๋ํด์ผ ํ๋์ง๋ฅผ ์ฐพ์์ผ ํ๋ค.
์ข -> ์ฐ๋ก ์ด๋ํ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ด๋ค.
ํ์ง๋ง, ์ด๋ฏธ ์ ๋ ฅ๋์ด์๋ A๊ฐ ์๋ค๋ฉด ๊ตณ์ด ์ํ๋ฒณ์ ๋ฐ๊ฟ ํ์๊ฐ ์๋ค.
์๋ฅผ๋ค์ด, "JAAAAN"๊ณผ ๊ฐ์ ๋ฌธ์์ด์์ J์ N์ ์ํ ์ด๋์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์ปค์๋ฅผ ์ด๋ํด์ผ ํ๋ค.
์ด ๊ฒฝ์ฐ์๋ J๋ฅผ ์ ๋ ฅํ๊ณ A๋ฅผ ๋๊ธฐ๊ธฐ ์ํด ์ฐ๋ก ์ด๋ํ๋ ๊ฒ๋ณด๋ค๋
J๋ฅผ ์ ๋ ฅํ๊ณ ์ข๋ก ์ด๋ํ์ฌ ๋ฐ๋ก ๋งจ ๋ค๋ก ์ด๋ํ์ฌ N์ ์ ๋ ฅํ๋ ๊ฒ์ด ๋ ๋น ๋ฅด๋ค.
๊ทธ๋ ๋ค๋ฉด, ์์ ๊ฐ์ด ๋ค๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ๋ ์ธ์ ํ์ํ ๊น?
"JAAAAN"๊ณผ ๊ฐ์ด A๊ฐ ์ฐ์๋ ํํ๋ก ๋ํ๋๋ค๋ฉด ์ฐ๋ก ์ด๋์ด ํ๋ค์ด์ง๋ค.
์ฆ, ์ฐ์๋ A๊ฐ ๋ง๋ค๋ฉด ๋ค๋ก ์ด๋์ ํ ํ๋ค.
๋ค๋ก ์ด๋ํ๋ ๊ฒ ๋ํ, ์ฐ์๋ A๋ฅผ ๋ง๋๊ธฐ ์ ๊น์ง์ ๋ฌธ์์ ๊ฐฏ์๋ ์ค์ํ๋ค.
๋ฐ๋ผ์ ๋ค๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ๋ ์๋์ ๊ฐ์ ์กฐ๊ฑด์ด ์ฑ๋ฆฝํ ๋ ํ์ํ๋ค.
์๋๋ ์ฐ์๋ A์ ๊ธธ์ด๋ฅผ ์ฌ๋ ํจ์์ด๋ค.
// A๊ฐ ๋ช๋ฒ ๋ฐ๋ณต ๋์ด์๋์ง ํ์ธ
// "AAA" -> 3
function continue(name){
let repeat = 0;
// ๋ฌธ์ A๊ฐ ๋ํ๋์ง ์์ ๋๊น์ง A ๊ฐ์ ์นด์ดํธ ํ ๋ฐํ
for(let i = 0; i < name.length; i++){
if(name[i] != "A")
break;
repeat++;
}
return repeat;
}
์ฐ์๋ A์ ๊ธธ์ด > ์ฒซ A ์ ๊น์ง์ ๋ฌธ์์ด์ ๊ธธ์ด
์์ ์์๋ฅผ ๋ณด์์ ๋, ์ฐ์๋ A์ ๊ธธ์ด๋ 3์ด๊ณ , ์ฒซ A ์ ๊น์ง์ ๋ฌธ์์ด์ ๊ธธ์ด๋ J ํ๋์ด๋ฏ๋ก 1์ด๋ค.
3 > 1์ด ์ฑ๋ฆฝ์ด ๋๋ค.
'๐ Algorithm > Solved' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ฒ ๋๋ฒ (Javascript) (1) | 2021.01.12 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฒด์ก๋ณต (Javascript) (0) | 2021.01.10 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ชจ์๊ณ ์ฌ (Javascript) (0) | 2021.01.10 |
[ํ๋ก๊ทธ๋๋จธ์ค] K๋ฒ์งธ ์ (Javascript) (0) | 2021.01.07 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ฃผํ์ง ๋ชปํ ์ ์ (Javascript) (0) | 2021.01.07 |