반응형
https://programmers.co.kr/learn/courses/30/lessons/42860
커서를 왼쪽과 오른쪽으로 모두 움직여봐서 풀 수 있는 문제입니다.
문제 접근법
- 처음에는 모두 A로 이루어져 있으므로, name의 길이만큼 A로 초기화해줍니다.
- 커서가 있는 위치의 알파벳이 A이거나 name과 동일하면 수정할 필요가 없으므로, 좌측과 우측으로 커서를 이동시킵니다.
- 다른 알파벳이 나왔을 경우 커서를 위로 이동 시켰을 때의 갯수와 아래로 이동 시켰을 때의 갯수를 비교하여 짧은 쪽으로 선택합니다.
- name과 같아질때까지 반복합니다.
아래는 코드입니다.
더보기
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
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#include <string>
#include <vector>
using namespace std;
int solution(string name) {
int answer = 0;
int index = 0;
string saveAlphabet = "";
for(int i = 0; i < name.size(); i++)
saveAlphabet += 'A';
while(saveAlphabet != name)
{
if(name[index] != 'A' && name[index] != saveAlphabet[index])
{
answer += min(name[index] - 'A', 'Z' - name[index] + 1);
saveAlphabet[index] = name[index];
}
else
{
int leftIndex = index, rightIndex = index;
int leftCount = 0, rightCount = 0;
while(1)
{
rightIndex++, rightCount++;
leftIndex--, leftCount++;
if(rightIndex >= name.size())
rightIndex = 0;
if(leftIndex < 0)
leftIndex = name.size() - 1;
if(name[rightIndex] != 'A'&& name[rightIndex] != saveAlphabet[rightIndex])
{
index = rightIndex;
answer += rightCount;
break;
}
else if(name[leftIndex] != 'A' && name[leftIndex] != saveAlphabet[leftIndex])
{
index = leftIndex;
answer += leftCount;
break;
}
}
}
}
return answer;
}
|
cs |
반응형
'프로그래머스 문제풀이 > LEVEL 2' 카테고리의 다른 글
[프로그래머스 / Level 2] 문자열 압축 (C++) (0) | 2021.12.22 |
---|---|
[프로그래머스 / Level 2] 괄호 변환 (C++) (0) | 2021.12.12 |
[프로그래머스 / Level 2] 카카오프렌즈 컬러링북 (C++) (0) | 2021.11.20 |
[프로그래머스 / Level 2] 소수 찾기 (C++) (0) | 2021.11.19 |
[프로그래머스 / Level 2] 타겟 넘버 (0) | 2021.11.01 |