[Algorithm] ๐น๏ธํ๋ก๊ทธ๋๋จธ์ค ์กฐ์ด์คํฑ
0. ๋ฌธ์
์กฐ์ด์คํฑ์ผ๋ก ์ํ๋ฒณ ์ด๋ฆ์ ์์ฑํ์ธ์. ๋งจ ์ฒ์์ A๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
ex) ์์ฑํด์ผ ํ๋ ์ด๋ฆ์ด ์ธ ๊ธ์๋ฉด AAA, ๋ค ๊ธ์๋ฉด AAAA
์กฐ์ด์คํฑ์ ๊ฐ ๋ฐฉํฅ์ผ๋ก ์์ง์ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
โฒ - ๋ค์ ์ํ๋ฒณ
โผ - ์ด์ ์ํ๋ฒณ (A์์ ์๋์ชฝ์ผ๋ก ์ด๋ํ๋ฉด Z๋ก)
โ - ์ปค์๋ฅผ ์ผ์ชฝ์ผ๋ก ์ด๋ (์ฒซ ๋ฒ์งธ ์์น์์ ์ผ์ชฝ์ผ๋ก ์ด๋ํ๋ฉด ๋ง์ง๋ง ๋ฌธ์์ ์ปค์)
โถ - ์ปค์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
์๋ฅผ ๋ค์ด ์๋์ ๋ฐฉ๋ฒ์ผ๋ก "JAZ"๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ์์น์์ ์กฐ์ด์คํฑ์ ์๋ก 9๋ฒ ์กฐ์ํ์ฌ J๋ฅผ ์์ฑํฉ๋๋ค.
- ์กฐ์ด์คํฑ์ ์ผ์ชฝ์ผ๋ก 1๋ฒ ์กฐ์ํ์ฌ ์ปค์๋ฅผ ๋ง์ง๋ง ๋ฌธ์ ์์น๋ก ์ด๋์ํต๋๋ค.
- ๋ง์ง๋ง ์์น์์ ์กฐ์ด์คํฑ์ ์๋๋ก 1๋ฒ ์กฐ์ํ์ฌ Z๋ฅผ ์์ฑํฉ๋๋ค.
๋ฐ๋ผ์ 11๋ฒ ์ด๋์์ผ "JAZ"๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ด๋๊ฐ ์ต์ ์ด๋์ ๋๋ค.
๋ง๋ค๊ณ ์ ํ๋ ์ด๋ฆ name์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ด๋ฆ์ ๋ํด ์กฐ์ด์คํฑ ์กฐ์ ํ์์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ๋ง๋์ธ์.
์ ํ์ฌํญ
- name์ ์ํ๋ฒณ ๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- name์ ๊ธธ์ด๋ 1 ์ด์ 20 ์ดํ์ ๋๋ค.
์ ๋ ฅ ์์
"JEROEN"
"JAN"
์ถ๋ ฅ ์์
56
23
1. ์์ด๋์ด
๐ก A์ ์ํ๋ฒณ์ ์ฐจ์ Z์ ์ํ๋ฒณ์ ์ฐจ ์ค ๋ ์์ ๊ฐ์ ๊ณ ๋ฆ
๐ก ์์น ์ด๋์ A๋ฅผ ๊ณ ๋ คํด์ค์ผํจ
i) ์์์ ์ด๋ํ๋ ๊ฒฝ์ฐ
ii) ๋ค์์ ์ด๋ํ๋ ๊ฒฝ์ฐ
iii) ์์์ ๊ฐ๋ค๊ฐ ๋๋์๊ฐ๋ ๊ฒฝ์ฐ
2. ํต์ฌ ํ์ด
1) A์ ์ํ๋ฒณ์ ์ฐจ์ Z์ ์ํ๋ฒณ์ ์ฐจ ์ค ๋ ์์ ๊ฐ์ ๊ณ ๋ฆ
answer+= Math.min(alpha-'A', 'Z'-alpha+1);
2-1) ์์์ ์ด๋ํ๋ ๊ฒฝ์ฐ
for(int i=1; i<length; i++) {
if(name.charAt(i) == 'A')
left++;
else
break;
}
2-2) ๋ค์์ ์ด๋ํ๋ ๊ฒฝ์ฐ
for(int i=length-1; i>=0; i--) {
if(name.charAt(i) == 'A')
right++;
else
break;
}
2-3) ์์์ ๊ฐ๋ค๊ฐ ๋๋์๊ฐ๋ ๊ฒฝ์ฐ
int next = i+1;
while(next<length && name.charAt(next) == 'A')
next++;
min = Math.min(min, length-next+i*2);
3. ์ฝ๋
class Greedy_14 {
public int solution(String name) {
int answer = 0;
int length = name.length();
int min = length - 1;
for (int i = 0; i < length; i++) {
char alpha = name.charAt(i);
answer += Math.min(alpha - 'A', 'Z' - alpha + 1);
int next = i + 1;
while (next < length && name.charAt(next) == 'A')
next++;
min = Math.min(min, length - next + i * 2);
}
int left = 0, right = 0;
for (int i = 1; i < length; i++) {
if (name.charAt(i) == 'A')
left++;
else
break;
}
for (int i = length - 1; i >= 0; i--) {
if (name.charAt(i) == 'A')
right++;
else
break;
}
int max = Math.max(right, left);
min = Math.min(min, length - 1 - Math.max(right, left));
answer += min;
return answer;
}
}
4. ๊ฒฐ๊ณผ
์ฑ๊ณตโจ
๊ฐ๋ค๊ฐ ๋ค์ ๋์์ค๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐ ๋ชปํด์ ์ฒ์์ ํ๋ ธ์๋ค..๐ญ
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Algorithm] ๐น๏ธํ๋ก๊ทธ๋๋จธ์ค ์กฐ์ด์คํฑ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@kha0318/Algorithm-ํ๋ก๊ทธ๋๋จธ์ค-์กฐ์ด์คํฑ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค