๐ 1. ๋ฌธ์ ์ค๋ช
๐ก 2. ์ ๊ทผ๋ฐฉ์
์กฐ์ด์คํฑ์ ์ ์์ผ๋ก ์ด๋ํ๋ ์ข์ฐ ์ด๋ ํ์(move)
์กฐ์ด์คํฑ ์ข์ฐ๋ก ์ด๋ํ๋ฉด์ ์ํ๋ฒณ ๋ณ๊ฒฝ๋ฅผ ์ํด ์ํ ์ด๋ ํ๋ ํ์(answer)
๋ ๊ฐ๋ฅผ answer์ ๋์ ํ๋ฉด์ ๋ํด์ค์ผ ํ๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๋๋ ๊ฒ์ ๋จ๋ฐฉํฅ์ด ์๋์ ์์ชฝ(์ข,์ฐ)๋ก ์กฐ์ด์คํฑ์ด ์์ง์ผ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋น ๋ฅธ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ด ๋ ์ฐ์๋ AAA์ ๊ฐ์๋ฅผ ๊ณ์ฐ ํด ์ฃผ์ด์ผ ํ๋ค.
โ ์ํ๋ฒณ ๋ณ๊ฒฝ
ํ์ฌ ์ธ๋ฑ์ค์์ A๋ฅผ ๋นผ์ค ๊ฐ vs Z๋ถํฐ ์์ํด์ ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๋นผ์ค ๊ฐ + 1
๋ ๊ฐ๋ฅผ ๋น๊ตํด์ ๋ ์์ ๊ฐ์ ์ ํํด ์ค๋ค.
์ ์๋ ์คํฑ์ ์ ๋ฐฉํฅโผ A๋ถํฐ ์์ฐจ์ ์ผ๋ก Z๋ก ๋ด๋ ค๊ฐ๋ฉด์ ๋ฐ๊พธ๋ ๊ฑฐ๊ณ
ํ์๋ ์คํฑ์ ๋จผ์ ์ญ๋ฐฉํฅโฒ์ผ๋ก 1์นธ ๋๋ ค์ Z๋ฅผ ๋ง๋ ๋ค์์ ๋ฐ๋๋ก ํด๋น ์ํ๋ฒณ์ ์ฐพ์๊ฐ๋ ๊ฒ์ด๋ค.
โ ์ฐ์๋ A๊ฐฏ์ ํ์ธ
โก`index = i+1`
ํ์ฌ ์์น ๋ค์ ๋ฌธ์๋ถํฐ ํ์ธํ๋ ค๊ณ ์ค์
ํ์ฌ ์์น(i)๋ ์ด๋ฏธ ์ฒ๋ฆฌ ์ค์ด๊ธฐ ๋๋ฌธ์, ๊ทธ ๋ค์ ์์น(i + 1)๋ถํฐ ์ฐ์๋ 'A'๋ฅผ ์ฐพ๊ธฐ ์ํด ํ์์ ์์ ํ๋ ๊ฒ
while๋ฌธ์ ์ฐ์๋ 'A'์ ๋์ ์ฐพ๋ ์กฐ๊ฑด๋ฌธ์ด๋ค.
์ธ๋ฑ์ค๊ฐ ๊ธธ์ด๋ณด๋ค ์๊ณ ํ์ฌ ๋ฌธ์๊ฐ A์ธ ๊ฒฝ์ฐ์๋ index++์ ํด์ ๋ค์ ๋ฌธ์๋ A์ธ์ง ํ์ธํด์ค๋ค.
โก`index < length`
๋ฌธ์์ด์ ๋์ ๋๋ฌํ๊ธฐ ์ ๊น์ง ๊ณ์ ํ์ํ๋ ๊ฒ. ๋ง์ฝ ํ์ ์ค ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋์ด์๋ฒ๋ฆฌ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ์กฐ๊ฑด์ ๋ถ์ฌ ์ค๋ค.
โก `name.charAt(index) == 'A'`
ํ์ฌ ํ์ ์ค์ธ ๋ฌธ์๊ฐ 'A'์ผ ๋๋ง index๋ฅผ ์ฆ๊ฐ์ํค๋ฉฐ ํ์ ๊ณ์ํ๊ณ 'A'๊ฐ ์๋ ๋ฌธ์๋ฅผ ๋ง๋๋ฉด while๋ฌธ ์ข
๋ฃ
for (int i = 0; i < name.length(); i++) {
answer += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1);
index = i + 1;
while (index < length && name.charAt(index) == 'A') {
index++;
}
โญ 3. ์ ๋ต์ฝ๋
class Solution {
public int solution(String name) {
int answer = 0;
int length = name.length();
int index = 0;
int move = length-1; // ์ข์ฐ ์์ง์ ์(๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์ ๊ธธ์ด-1)
// ์ํ๋ฒณ ๋ณ๊ฒฝ ํ์(์ํ ์์ง์)
for (int i = 0; i < name.length(); i++) {
answer += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1);
// ์ฐ์๋ A ๊ฐ์ ํ์ธ
index = i + 1;
while (index < length && name.charAt(index) == 'A') {
index++;
}
// ์ต์ ์ด๋ ํ์(์ข์ฐ ์์ง์)
// ์์๋๋ก ๊ฐ๋ ๊ฒ๊ณผ, ๋ค๋ก ๋์๊ฐ๋ ๊ฒ ์ค ์ด๋์๊ฐ ์ ์ ๊ฒ์ ์ ํ
// ๋์ BBAAAZ๊ฐ์ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋ค๊ฐ ์ผ์ชฝ์ผ๋ก ๊ฐ์ผ ํด์ ์ด๋ฐ ์์์ด ๋์ด
// ์ฌ๊ธฐ์ index๋ ์ฐ์๋ A์ ๋ง์ง๋ง ์์น
move = Math.min(move, i * 2 + length - index);
// BBBBAAAAAAAB ์ ๊ฐ์ด, ์ฒ์๋ถํฐ ๋ท๋ถ๋ถ์ ๋จผ์ ์
๋ ฅํ๋ ๊ฒ์ด ๋ ๋น ๋ฅธ ๊ฒฝ์ฐ ๊ณ ๋ ค
move = Math.min(move, (length - index) * 2 + i);
}
// ๋ฌธ์ ๋ณ๊ฒฝ ํ์(answer)์ ์ต์ ์ด๋ ํ์(move)์ ํฉ
return answer + move ;
}
}
๐๐ป ์ข์์ ๊ฐ์ฅ ๋ง์ด ๋ฐ์ ์ฝ๋
class Solution {
public int solution(String name) {
int answer = 0;
int[] diff={0,1,2,3,4,5,6,7,8,9,10,11,12,13,12,11,10,9,8,7,6,5,4,3,2,1};
for(char c:name.toCharArray())
answer+=diff[c-'A'];
int length=name.length();
int min=length-1;
for(int i=0;i<length;i++){
int next=i+1;
while(next<length && name.charAt(next)=='A'){
next++;
}
min=Math.min(min,i+length-next+Math.min(i,length-next));
}
return answer+min;
}
}
๐ฆ 4. ๊ฐ์ ์ ํ ๋ฌธ์ (๊ทธ๋ฆฌ๋)
'Algorithm > Programmers_Best' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์ฒด์ก๋ณต (Greedy) (59) | 2024.12.06 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ๋ชจ์์ฌ์ (์์ ํ์) (56) | 2024.11.23 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ (์์ ํ์) (6) | 2024.11.23 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ํผ๋ก๋ (์์ ํ์) (56) | 2024.11.22 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์นดํซ (์์ ํ์) (70) | 2024.11.22 |