Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / C++] ์กฐ์ด์Šคํ‹ฑ

meeeeejin 2021. 1. 10. 21:01

 

๋ฌธ์ œ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/42860

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์กฐ์ด์Šคํ‹ฑ

์กฐ์ด์Šคํ‹ฑ์œผ๋กœ ์•ŒํŒŒ๋ฒณ ์ด๋ฆ„์„ ์™„์„ฑํ•˜์„ธ์š”. ๋งจ ์ฒ˜์Œ์—” A๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ex) ์™„์„ฑํ•ด์•ผ ํ•˜๋Š” ์ด๋ฆ„์ด ์„ธ ๊ธ€์ž๋ฉด AAA, ๋„ค ๊ธ€์ž๋ฉด AAAA ์กฐ์ด์Šคํ‹ฑ์„ ๊ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. โ–ฒ - ๋‹ค

programmers.co.kr

 

ํ’€์ด

 

์กฐ์ด์Šคํ‹ฑ์„ ์œ„์•„๋ž˜๋กœ ์›€์ง์ด๋Š” ํšŸ์ˆ˜์™€ ์ขŒ์šฐ๋กœ ์›€์ง์ด๋Š” ํšŸ์ˆ˜๋ฅผ ๋”ฐ๋กœ ์ƒ๊ฐํ–ˆ๋‹ค. 

 

์œ„์•„๋ž˜๋กœ ์›€์ง์ด๋Š” ๊ฒƒ์€ ์•ŒํŒŒ๋ฒณ์—์„œ A๊ฐ€ ๊ฐ€๊นŒ์šด์ง€ Z๊ฐ€ ๊ฐ€๊นŒ์šด์ง€์— ๋”ฐ๋ผ ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ–ˆ๋‹ค. 

 

์ขŒ์šฐ๋กœ ์›€์ง์ด๋Š” ๊ฒƒ์€ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์ค‘ ์–ด๋Š ์ชฝ์œผ๋กœ ๊ฐ€์•ผ ์ตœ์†Œ๊ฐ€ ๋˜๋Š”์ง€๋ฅผ ๊ตฌํ•ด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค. ์ขŒ์šฐ ์ด๋™ ํšŸ์ˆ˜(move)์˜ ์ดˆ๊นƒ๊ฐ’์€ ์ตœ๋Œ€ ์ด๋™ ํšŸ์ˆ˜์ธ len - 1์ด๋‹ค. ์ดํ›„ i + (len - next) + min(i, len - next)๊ณผ ๋น„๊ตํ•ด ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•œ๋‹ค. 

 

ABBAAAABA๋ฅผ ์˜ˆ์‹œ๋กœ ๊ณ„์‚ฐ์„ ์„ค๋ช…ํ•˜์ž๋ฉด, i๊ฐ€ 2์ผ ๋•Œ next๋Š” 7์ด ๋œ๋‹ค. i์—์„œ next๊นŒ์ง€ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ–ˆ์„ ๋•Œ์˜ ๊ฑฐ๋ฆฌ๋Š” i + (len - next)์ด๋‹ค. ์ฒ˜์Œ์— ์™ผ์ชฝ์œผ๋กœ ๊ฐˆ์ง€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐˆ์ง€๋Š” min(i, len - next)๋กœ ๊ตฌํ•œ๋‹ค. ์ด ์˜ˆ์‹œ์—์„  len - next์˜ ๊ฐ’์ด ๋” ์ž‘์œผ๋ฏ€๋กœ ์™ผ์ชฝ์œผ๋กœ ๋จผ์ € ๊ฐ€๋Š” ๊ฒƒ์„ ํƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ len - next๋ฅผ i์™€ next์˜ ๊ฑฐ๋ฆฌ์— ๋”ํ•ด์ฃผ์–ด ์™ผ์ชฝ์œผ๋กœ ๊ฐ”๋‹ค๊ฐ€ ๋Œ์•„์˜ค๋Š” ๊ฒƒ์„ ๊ณ„์‚ฐํ•ด์ค€๋‹ค. 

 

 

 

์†Œ์Šค์ฝ”๋“œ

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int solution(string name) {
    int answer = 0
    for(auto ch: name) answer += min(ch - 'A'91 - ch);
 
    int len = name.length();
    int move = len - 1;
    int next;
    for(int i = 0; i < len; i++) {
        next = i + 1;
        while(next < len && name[next] == 'A') next++;
        move = min(move, i + (len - next) + min(i, len - next));
    }
    answer += move;
 
    return answer;
}
cs

 

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

 

 

๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

 

 

 

728x90