거북이처럼 코딩해도 괜찮으려나

004. 조이스틱 본문

코딩/알고리즘

004. 조이스틱

Hoooon22_코딩거북이_ 2021. 4. 10. 23:50
728x90

https://programmers.co.kr/learn/courses/30/lessons/42860

  1. 사용 언어 : C#
  2. 체감 난이도 : 애매한 문제
  3. 활용 : 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