C#

[프로그래머스 힌트/답/해석/해석] 최빈값 찾기

Guk-blog 2024. 1. 29. 10:59
728x90
반응형

힌트

더보기

int 배열 내에서 반복해서 나온 횟수를 기억한다

(* 2회 이상부터 기억해도 되지만 1회만 나왔을 때 예외처리를 해주어야 한다)

나온 횟수가 가장 큰 수를 리턴해준다.

최빈값이 2개 이상이면 -1을 리턴한다

 

- 반복문을 통해서 가장 많이 나온 숫자를 기억하는 방식

- GroupBy,  Dictionary<int, int> 등으로 값, 나온 횟수를 저장할 수 있다

정답

더보기
var list = array.GroupBy(x => x, g => g, (x, g) => new { n = x, cnt = g.Count() });
var max = list.Where(x => x.cnt == list.Max(o => o.cnt));
return max.Count() > 1 ? -1 : max.First().n;

해석

더보기
var list = array.GroupBy(x => x, g => g, (x, g) => new { n = x, cnt = g.Count() });

list {값, 나온 횟수}를 저장

var max = list.Where(x => x.cnt == list.Max(o => o.cnt));

나온 횟수가 가장 큰 값들을 저장한다

return max.Count() > 1 ? -1 : max.First().n;

max의 수가 1 이상이면 -1을 리턴하고 1개일 때 값을 리턴한다.

max.First().n(max의 개수가 1개일 때 First, Last 둘 다 같은 그룹을 가리킴)

728x90
반응형