프로그래머스

[프로그래머스] [C#] 연습문제 > 최댓값과 최솟값

laverpearl 2023. 3. 28. 12:59

 

 

 

 

문제 : 최댓값과 최솟값

사용언어 : C#

 

 

 

 

 

 

문제 내용

 

문제 설명

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다.

str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수,

solution을 완성하세요.


예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고,

"-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

 

제한 조건
  • s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.
입출력 예
s return
"1 2 3 4" "1 4"
"-1 -2 -3 -4" "-4 -1"
"-1 -1" "-1 -1"

 

 

 

 

 

 

내 풀이 

 

 

먼저 string으로 된 문자열 자료형을

int[ ] int 자료형 배열로 바꿔주었다. 

출력 문자열은 최소 + " " + 최대 로해서 출력하기위해 

배열에서 Min(), Max()함수를 이용해 최대최소를 찾고,

그 int형 자료형을 To_String()함수를 이용하여 문자열로 바꿔주었다.  

 

using System.Linq;

public class Solution {
    public string solution(string s) {
            string answer = "";

            int[] array = s.Split(' ').Select(int.Parse).ToArray();
            answer = array.Min().ToString() + " " + array.Max().ToString();

            return answer;
    }
}

 

 

 

 

 

 

 

 

+ Linq의 Select를 사용하지 않은 또 다른 풀이

 

Split()함수로 공백을 뺀 문자열들을 하나 다시 만들고,

foreach로 다시만든 문자열들을 반복문을 만들었다.

 

min, max 변수를 만들어 정수형의 값 value와 함께 인자값으로 넣고 

Math.Min(), Math.Max()함수를 사용했다.

 

using System;

        public string solution(string s)
        {
            string answer = "";
            string[] array = s.Split(' ');

            int min = int.MaxValue;
            int max = int.MinValue;

            foreach (var i in array)
            {
                var value = int.Parse(i);

                min = Math.Min(value, min);
                max = Math.Max(value, max);
            }

            return string.Format("{0} {1}", min, max);
        }

 

 

 

 

 

 

 

 

 

 

 

 

문자열관련 함수, LINQ

 

 

 

ToArray()

public T[] ToArray ();

List<T>의 요소를 새 배열에 복사 

 

 

 

 

 

ToString()

public virtual string? ToString ();

현재 개체를 나타내는 문자열을 반환 

 

 

 

 

 

문자열 자르기 / Split() 함수 

public String[] Split(char separator, StringSplitOptions options = StringSplitOptions.None);

하나 이상의 구분 기호를 기준으로 입력 문자열을 분할하여 부분 문자열 배열을 만든다. 

인자값으로 separator안에 ' '를 넘겨준다면 공백을 기분으로 문자열을 분할한다. 

 

 

 

 

 

 

문자열을 정수로 / Parse(String) 함수 

public static int Parse (string s);

숫자로 표현된 문자열 s를 그 숫자에 해당하는 32비트부호 있는 정수로 변환한다.  

 

 

 

 

Enumerable.Select() 함수 

public static System.Collections.Generic.IEnumerable<TResult> 
Select<TSource,TResult> (this System.Collections.Generic.IEnumerable<TSource> 
source, Func<TSource,TResult> selector);

복잡하지만 간단하게게 보자면, 

string.Select(IEnumerable<TSource> source, Func<TSource,TResult> selector);
sourceIEnumerable<TSource> -> 변형 함수를 호출할 값 시퀀스
selectorFunc<TSource,TResult> -> 각 요소에 적용할 변환 함수
를 매개변수로 넘겨주면 시퀀스의 각 요소를 변환함수에 적용하는 함수이다. 
System.Linq 네임스페이스 함수이다. 
 
 
 
 

LINQ (Language Integrated Query)

LINQ는 다양한 소스 및 형식에서 데이터를 검색하기 위한 C#의 균일한 쿼리 구문이다. 

 

- 쿼리 기능
- 큰 데이터가 많이 모여있는 경우 사용
- from : 어디에서 찾을 수 있는 것인지 
- where : 조건이 무엇인지 
- select : 어떤 것을 가져올 것인지, 특정 형식으로 변환 가능 
 

LINQ는 깔끔하고 쉽게 읽고 쓸 수 있지만, 일반적으로 알고리즘을 수동으로 작성하는 것보다 

훨씬 더 많은 계산, 많은 메모리할당이 필요하다고 한다. 

그렇기 때문에 Unity에서는 LINQ를 사용하지 않는게 좋다고 한다!

 

 

 

 

 
 

 

 

참고 

 

Microsoft - Unity에 대한 성능 추천 사항 

https://learn.microsoft.com/ko-kr/windows/mixed-reality/develop/unity/performance-recommendations-for-unity?tabs=openxr