Notice
Recent Posts
Recent Comments
Link
거북이처럼 코딩해도 괜찮으려나
004. 조이스틱 본문
728x90
- 사용 언어 : C#
- 체감 난이도 : 애매한 문제
- 활용 : Greedy Algorithm
<작성한 코드>
public int solution(string name)
{
int answer = 0;
// name의 Length에 따른 다른 방식 적용
if (name.Length < 3)
{
foreach (char c in name)
{
if (c <= 'N')
answer += c - 'A'; // A에서 밑으로
else
answer += 'Z' - c + 1; // A에서 위로
}
}
else
{
char[] c = name.ToCharArray();
int index = 0;
int left_index = name.Length - 1; // 마지막 인덱스
int right_index = 1;
// c[0] 알파벳 맞추기
if (c[index] <= 'N')
answer += c[index] - 'A'; // A에서 밑으로
else
answer += 'Z' - c[index] + 1; // A에서 위로
// 1. 모든 문자열을 돌때까지 반복
while (left_index >= right_index)
{
if (Math.Abs(c[right_index] - 'N') > Math.Abs(c[left_index] - 'N')) // right_index로 가는 경우가 효율적일 경우
{
answer++; // right로 한 칸 이동
index = right_index;
right_index++;
}
else // left_index로 가는 경우가 효율적일 경우
{
answer++; // left로 한 칸 이동
index = left_index;
left_index--;
}
// 2. 알파벳 맞추기
if (c[index] <= 'N')
answer += c[index] - 'A'; // A에서 밑으로
else
answer += 'Z' - c[index] + 1; // A에서 위로
}
}
return answer;
}
접근 방식은 나쁘지 않았다. 아이디어 노트는 다음과 같다.
left_index와 right_index를 설정하여 더 효율적인 루트를 사용하는 것이다.
그런데 풀면서 테스트 케이스의 허점이 많다는 것을 알게되었다. "BABAAAAB"와 같은 문자열에 경우에 나오는 결과값이 이상했다...
'코딩 > 알고리즘' 카테고리의 다른 글
006. 입국심사 (0) | 2021.04.14 |
---|---|
005. 예상 대진표 (0) | 2021.04.14 |
003. 스킬 트리 (0) | 2021.04.09 |
002. 시저 암호 (0) | 2021.04.08 |
001. 문자열 다루기 기본 (0) | 2021.04.07 |