https://programmers.co.kr/learn/courses/30/lessons/42860
[풀이] Greedy
가장 효율적으로 알파벳을 변경하는 방법은 이동시 가장 가까운 곳으로 이동해서 변경해주는 것이다.
어차피 변경해야할 모든 알파벳을 방문해야 하기 때문이다.
어떤 알파벳을 방문할 때 <-,->를 이용하는 두가지 방법 중 min값이 이동거리이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <string> #include <vector> #include <iostream> #include <cmath> #include <algorithm> using namespace std; int solution(string name) { int answer = 0; string curName(name.size(), 'A'); int cur = 0; while (name != curName) { int near = -1; int minDiff = 30; for (int i = 0; i < name.size(); i++) { if (name[i] != curName[i]) { int diff = abs(cur - i); diff = min(diff, (int)name.size() - diff); if (minDiff > diff) { near = i; minDiff = diff; } } } cur = near; curName[cur] = name[cur]; answer += minDiff; int k = name[cur] - 'A'; answer += min(26 - k, k); //cout << "cur : " << cur << ", minDiff : " << minDiff << ", k : " << k << ", len -k : " << 26-k << endl; } return answer; } | cs |
'Problem-Solving > Programmers' 카테고리의 다른 글
[프로그래머스] Level2 - 가장 큰 수 (C++) (0) | 2020.07.28 |
---|---|
[프로그래머스] Level2 - 큰 수 만들기(C++) (0) | 2020.07.14 |
[프로그래머스] Level2 - 더 맵게 (C++) (0) | 2020.07.07 |
[프로그래머스] Level2 - 괄호 변환 (C++) (0) | 2020.06.28 |
[프로그래머스] Level2 - 카카오 프렌즈 컬러링북 (0) | 2020.06.21 |