[프로그래머스] [C#] 연습문제 > 최댓값과 최솟값
문제 : 최댓값과 최솟값
사용언어 : 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);
LINQ (Language Integrated Query)
LINQ는 다양한 소스 및 형식에서 데이터를 검색하기 위한 C#의 균일한 쿼리 구문이다.
LINQ는 깔끔하고 쉽게 읽고 쓸 수 있지만, 일반적으로 알고리즘을 수동으로 작성하는 것보다
훨씬 더 많은 계산, 많은 메모리할당이 필요하다고 한다.
그렇기 때문에 Unity에서는 LINQ를 사용하지 않는게 좋다고 한다!
참고
Microsoft - Unity에 대한 성능 추천 사항