김펭귄 관찰일기
article thumbnail

1. Today

 알고리즘 코드 카타에서 만난 한 녀석을 아직도 해결하지 못했다. 흐음,,, 정답은 맞는데 자꾸만 시간 초과가 뜬다. 이런 경우에 어떻게 해결해야 할지 참 난감하다. 차라리 정답이 틀린 거면 어찌어찌 찾기라도 하는데 이거 참~

 

 두 번째 시도에서 어떤 분이 일일이 나눠서 해결했다는 말을 듣고, 하나하나 if문 조건을 걸어가며 만들어봤지만.. 역시나 시간 초과다. 흠.. 도무지 원인을 알 수가 없다. 다른 방법으로 시도해봐야 할까?

 

<2차 시도>

using System;
using System.Collections.Generic;
using System.Linq;

public class Solution
{
    public int solution(int[] ingredient)
    {
        int answer = 0;
        int currentIndex = 0;
        int compareNum = 0;
        int indexCount = 0;
        int hamburgerCount = 0;

        List<int> ingredientToList = ingredient.ToList();
        List<int> tempHamburbur = new List<int>();

        while (true)
        {
            compareNum = ingredientToList[currentIndex];
            indexCount = ingredientToList.Count;

            if (compareNum == 1)
            {
                if (hamburgerCount == 0)
                {
                    hamburgerCount++;
                    tempHamburbur.Add(1);
                }
                else if (hamburgerCount == 3)
                {
                    answer++;
                    ingredientToList.RemoveRange(currentIndex - 3, 4);
                    currentIndex = -1;
                    hamburgerCount = 0;
                }
                else
                {
                    tempHamburbur.Clear();
                    hamburgerCount = 1;
                    tempHamburbur.Add(1);
                }
            }
            else if (
                (compareNum == 2 && hamburgerCount == 1) || (compareNum == 3 && hamburgerCount == 2)
            )
            {
                tempHamburbur.Add(2);
                hamburgerCount++;
            }
            else
            {
                tempHamburbur.Clear();
                hamburgerCount = 0;
            }

            currentIndex++;

            if ((currentIndex + 4 - hamburgerCount) > indexCount)
            {
                break;
            }
        }

        return answer;
    }
}

 

<3차 시도>

using System;
using System.Collections.Generic;
using System.Linq;

public class Solution
{
    public int solution(int[] ingredient)
    {
        int answer = 0;
        int findIngredient;
        string ingredientToString = String.Join("", ingredient);
        int stringLength = ingredientToString.Length;

        do
        {
            findIngredient = ingredientToString.IndexOf("1231");

            if (findIngredient == -1 || stringLength < 4)
            {
                break;
            }
            else if (findIngredient != -1)
            {
                ingredientToString = ingredientToString.Remove(findIngredient, 4);
                stringLength--;
                answer++;
            }
        } while (findIngredient != -1);

        return answer;
    }
}

 

<4차 시도>

using System;
using System.Collections.Generic;
using System.Linq;

public class Solution
{
    public int solution(int[] ingredient)
    {
        int answer = 0;
        int index = ingredient.Length;
        int hamburgurIndex = -1;
        int findIndex;

        string hamburgur = "";

        for (int i = 0; i < index; i++)
        {
            hamburgurIndex++;
            hamburgur = hamburgur.Insert(hamburgurIndex, ingredient[i].ToString());

            if (4 <= hamburgurIndex)
            {
                findIndex = hamburgur.IndexOf("1231");

                if (findIndex != -1)
                {
                    answer++;
                    hamburgur = hamburgur.Remove(findIndex, 4);
                    hamburgurIndex -= 4;
                }
            }
        }

        return answer;
    }
}
profile

김펭귄 관찰일기

@Penguin.Kim