https://school.programmers.co.kr/learn/courses/30/lessons/42860?language=javascript#
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ 2
๊ทผ๋ฐ ๊ฝค ์ด๋ ค์ ๋ค ใ ใ ๊ผญ ํ์๋ฒ์ผ๋ก ํ์ง ์์๋ ๋๋ ๊ฒ ๊ฐ์๋ค
์ด์ ๋ ๋์ด๋๋ฉด ๋ ๋ฒจ3 ์๋๋๊ณ ,,
1. ์ฒซ๋ฒ์งธ ํ์ด : 74.1์ ๐ต
๋ฐ๋ก : "BBBBAAAAAAB"
๊ธฐ๋๊ฐ 10, ๊ฒฐ๊ณผ๊ฐ 12
function solution(Name) {
let name = Name.split('');
let answer = 0;
console.log('A'.charCodeAt(),'Z'.charCodeAt()); // 65~90
// abcdefghijklm-n(13)-opqrstuvwxyz
let n = 0;
let i = 0;
let cnt = 0; // A์ ๊ฐฏ์
for(let k=0; k<name.length; ++k){
if(name[k]=='A') cnt++;
}
if(cnt===name.length) return 0;
while(1){
console.log(i, name[i] ,answer)
n = String(name[i]).charCodeAt();
if(n!==65) cnt++;
if((n-65)>13){
answer += (90-n+1);
}
else answer += (n-65);
name.splice(i,1,'A')
if(cnt == name.length) break;
// ์์ชฝ์ผ๋ก ๊ฐ์ผํ๋ ์, ๋ค์ชฝ์ผ๋ก ๊ฐ์ผํ๋ ์ ๋น๊ต (A์ ๊ฐ์)
let front=1; let back=1;
let j = i+1;
while(1){
if(j>name.length-1) j = 0;
if(name[j]=='A') front++;
else break;
j++;
}
let k = i-1;
while(1){
if(k<0) k = name.length-1;
if(name[k]=='A') back++;
else break;
k--;
}
console.log("front", front, "back" ,back)
if(front > back) {
i = k;
answer += back;
}
else {
i = j;
answer += front;
}
}
return answer;
}
2. ๋๋ฒ์งธ ํ์ด : ์ ๋ต โ
์ํ๋ฒณ ๋ณ๊ฒฝ ํ์ ์นด์ดํธ๋ ์ฌ์ ๋๋ฐ, ์ด๋ํ์ min ๊ฐฑ์ ์ด ์ด๋ ค์ ๋ค!!!
<์ฃผ์ ์ฝ๋>
let rightFirst = j * 2 + (name.length - nextIdx);
let leftFirst = (name.length - nextIdx) * 2 + j;
minMove = Math.min(minMove, rightFirst, leftFirst);
์ ์ฝ๋๋ฅผ ์ฝ๊ฒ ํ์ดํด๋ณด๋ฉด, ์๋์ ๊ฐ๋ค.
์์ ) "BBBBAAAAAAB"
1๏ธโฃ ์ธ๋ฑ์ค 0๋ถํฐ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋ค๊ฐ ๋๋์์์ ๋ค๋ก ๊ฐ๋ ๊ฒฝ์ฐ (rightFirst)
-> 0์ ๊ธฐ์ค์ผ๋ก, right - left ์๋ณต ํ ๋ค๋ก ๋์ด๊ฐ์ ๋๋ถ๋ถ 9๋ก ๊ฐ
• j = 3 (์ฌ๊ธฐ๊น์ง ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ์ผ ํจ)
• nextIdx = 9 (๋ค์ B๊ฐ ์๋ ์์น)
• ๊ณ์ฐ: 3 * 2 + (10 - 9) = 6 + 1 = 7
2๏ธโฃ ์ธ๋ฑ์ค 0์์ ์ผ์ชฝ(๋ค)์ผ๋ก ๊ฐ๋ค๊ฐ ๋ค์ ๋์์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋ ๊ฒฝ์ฐ (leftFirst)
-> 0์ ๊ธฐ์ค์ผ๋ก, 9๋ฒ์งธ ์ธ๋ฑ์ค๋ก ๊ฐ๋ค๊ฐ ๋ค์ 0์ผ๋ก ๋์์์(์๋ณต) ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ
• nextIdx = 9 (๋ค์ B๊ฐ ์๋ ์์น)
• name.length - nextIdx = 10 - 9 = 1
• ๊ณ์ฐ: (1 * 2) + 3 = 2 + 3 = 5
์ฆ, ๊ณฑํ๊ธฐ 2๋ฅผ ํด์ฃผ๋๊ฑด ์๋ณต์ด๋์ด๊ธฐ ๋๋ฌธ!
๋์ ํ์ด
function solution(name) {
let answer = 0;
console.log('A'.charCodeAt(),'Z'.charCodeAt()); // 65~90
// abcdefghijklm-n(13)-opqrstuvwxyz
let n = 0;
let i = 0;
let cnt = 0; // A๊ฐ ์๋ ๊ฐ์ ๊ฐ์
// 1. ์ํ๋ฒณ ์ด ๋ณ๊ฒฝ ํ์
for(let k=0; k<name.length; ++k){
if(name[k]!=='A'){
answer += Math.min(name[k].charCodeAt()-65,
90-name[k].charCodeAt()+1);
cnt++;
min = k;
}
}
if(cnt===0) return 0;
// 2. ์ต์ ์ด๋ ํ์
let minMove = name.length - 1;
for (let j = 0; j < name.length; j++) {
let nextIdx = j + 1;
while (nextIdx < name.length && name[nextIdx] === 'A') {
nextIdx++;
}
let rightFirst = j * 2 + (name.length - nextIdx);
let leftFirst = (name.length - nextIdx) * 2 + j;
minMove = Math.min(minMove, rightFirst, leftFirst);
}
answer += minMove;
return answer;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript/PGS] Lv.3 : ๊ธฐ์ง๊ตญ ์ค์น (0) | 2025.02.18 |
---|---|
[Javascript/PGS] Lv.3 : ์์ดํ ์ค๊ธฐ(BFS) (0) | 2025.02.17 |
[Javascript/PGS] Lv.0 : ๋ค์์ ์ฌ ์ซ์ (์ ๋ฌธ 100์ ๋ง์คํฐ!๐ฅ) (0) | 2025.02.11 |
[Javascript/PGS] Lv.0 : ์ด์ง์ ๋ํ๊ธฐ (0) | 2025.02.11 |
[Javascript/PGS] Lv.0 : ์นํจ ์ฟ ํฐ (0) | 2025.02.11 |