알고리즘/C#

[C#] 제일 작은 수 제거하기 - 프로그래머스

야아옹 2020. 10. 18. 16:25

문제 : 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴

 

제한조건 

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

풀이 : 다른사람 풀이를 보고 너무 부끄러워지는....코드...인거같다..하핳... 왜이랬을까.. 왜 다중 for 문을 썻을까... 

public static int[] solution(int[] arr)
{
    int[] answer = new int[] { };
    if (arr.Length <= 1)
    {
        answer = new int[] { -1 };
        return answer;
    }
    int temp = arr[0];
    for (int i = 0; i < arr.Length; i++)
    {
        for (int j = 1; j < arr.Length; j++)
        {
            if (temp < arr[j]) continue;
            else
                temp = arr[j];
        }
    }
    answer = arr.Select(x => x).Where(y => y != temp).ToArray();
    return answer;

}

 

풀이2 : 위에것을 줄이자.... 히 min / max 가 있는데...저걸 왜 구현을.......

public static int[] solution(int[] arr)
{
    int[] answer = new int[] { };
    if (arr.Length <= 1)
    {
        answer = new int[] { -1 };
        return answer;
    }
    int temp = arr.Min();
    answer = arr.Select(x => x).Where(y => y != temp).ToArray();
    return answer;
}

 

 

풀이3 :  이러한 배열을 유지한체 필요없는것들은 뺀 임시 배열과 비교 하는것을 구현 해보고싶었는데 비슷한게 있어 다시 풀어 보았다!

public static int[] solution(int[] arr)
{
    List<int> b = new List<int>(arr);
    List<int> c = new List<int>(arr);
    b.Sort();
    c.Remove(b[0]);
    if (c.Count == 0)
    {
        c.Add(-1);
    }
    return c.ToArray();
}