μ½λλ₯Ό μ§λ€κ° λ§λ λμ μ
λλ€.
λ€λ₯Έ λΆλ€μ μ΄λ»κ² νμλ μ§ λ¬Έλ κΆκΈν΄μ‘μ΅λλ€.
λ¬Έμ
κ²°κ³Ό μμμ²λΌ, μ μ μνμ€μμ λΆλΆμ μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ°μνλ μνμ€μ 첫 μ μλ§ μΆμΆνλ LInq λ©μλλ₯Ό μμ±νμμ€. λ¨, μ
λ ₯κ°μ μ λ ¬λ¨μ 보μ₯νμ§ μμ΅λλ€.
IEnumerable<int> Extract(IEnumerable<int> numbers)
{
// μ½λ
}
κ²°κ³Ό μμ
μ
λ ₯: { 1, 2, 5, 6, 8, 9, 10, ... }
μΆλ ₯: { 1, 5, 8, ... }
5κ°μ μ’μμ
dimohy
2
μ
λ ₯ κ°μ μ λ ¬λμλ€κ³ κ°μ νλμ?
4κ°μ μ’μμ
λ°μ§μ§ μμ΅λλ€.
λΆλΆ μ°μμ΄λ μ€λ¦μ°¨μμΌλ‘ μ°μλ κ²μ
λλ€.
4κ°μ μ’μμ
μ°μλ μ«μλ κ³ λ € νμ§ μκ³ λ¨μν
IEnumerable<int> Extract(IEnumerable<int> numbers)
{
int? prev = null;
foreach (int number in numbers)
{
if (prev == null || number != prev + 1)
{
yield return number;
}
prev = number;
}
}
var result = Extract(
new List<int> { -1, -1, -2, -1, 0, 1, 2, 4, 5, 6, 8, 8, 9, 10 };
);
[κ²°κ³Ό]
-1, -1, -2, 4, 8, 8
6κ°μ μ’μμ
μμ½μ΅λλ€.
μμ μ μ
λ ₯κ³Ό μꡬνλ μΆλ ₯μ
λλ€.
μ
λ ₯: { -1, -1, -2, -1, 0, 1, 2, 4, 5, 6, 8, 8, 9, 10 }
μΆλ ₯: { -2, 4, 8 }
4κ°μ μ’μμ
dimohy
6
μκ°λ³΄λ€ μ½λκ° κ°λ¨νκ²λ μλμ€λ€μ.
IEnumerable<int> numbers = [1, 2, 5, 6, 8, 9, 10];
var result = numbers.Extract();
Console.WriteLine($"[{string.Join(", ", result)}]");
IEnumerable<int> numbers2 = [-1, -1, -2, -1, 0, 1, 2, 4, 5, 6, 8, 8, 9, 10];
var result2 = numbers2.Extract();
Console.WriteLine($"[{string.Join(", ", result2)}]");
static class LinqMethodExtension
{
public static IEnumerable<int> Extract(this IEnumerable<int> @this)
{
int? prev = null;
var distance = 0;
foreach (var item in @this)
{
prev ??= item;
if (item == prev + distance)
distance++;
else
{
if (distance > 1)
yield return prev.Value;
prev = item;
distance = 1;
}
}
if (distance > 1 && prev is not null)
{
yield return prev.Value;
}
}
}
| μΆλ ₯
[1, 5, 8]
[-2, 4, 8]
5κ°μ μ’μμ
URK96
7
μ°μ μ μ€νμΌλ‘ λμΆ© μ½λλ₯Ό μ§λ³΄λ©΄ μλμ κ°μ΄ λμ€λ€μ
using System.Linq;
IEnumerable<int> Extract(IEnumerable<int> numbers)
{
bool findFlag = false;
for (int i = 0; i < (numbers.Count() - 1); ++i)
{
int current = numbers.ElementAt(i);
int next = numbers.ElementAt(i + 1);
if ((next - current) is 1)
{
if (!findFlag)
{
findFlag = true;
yield return current;
}
else
{
continue;
}
}
else
{
findFlag = false;
}
}
}
List<int> target = new() { -1, -1, -2, -1, 0, 1, 2, 4, 5, 6, 8, 8, 9, 10 };
List<int> result = Extract(target).ToList();
result.ForEach(x => Console.WriteLine($"{x} "));
λ΄λΆ ꡬνμ LINQλ‘ μ²λ¦¬ν΄λ³΄κ³ μΆμλ°β¦μμ§ LINQ μ€λ ₯μ΄ νλ³μ리μΈμ§λΌ ꡬνμ΄ μ΄λ ΅λ€μ γ
γ
4κ°μ μ’μμ
List<int> list = [-1, -1, -2, -1, 0, 1, 2, 4, 5, 6, 8, 8, 9, 10];
Console.WriteLine(string.Join(", ", Extract(list)));
// output: -2, 4, 8
IEnumerable<int> Extract(IEnumerable<int> numbers)
{
return numbers.Distinct()
.Order()
.Select(x => (Key: x, Result: Enumerable.Repeat(x, 1)))
.Aggregate((prev, next) => prev.Key + 1 == next.Key ? (next.Key, prev.Result) : (next.Key, prev.Result.Concat(next.Result)))
.Result;
}
μμ linqλ§μ μ΄μ©νλ €λ©΄ μ΄λ κ²λ κ°λ₯ν©λλ€.
6κ°μ μ’μμ
μ’μ μ½λλ‘ μ°Έμ¬ κ°μ¬λ립λλ€.
κ·Έλ°λ°, μ
λ ₯κ°μ΄ IEnumerableμΈλ°, 컬λ μ
μΌλ‘ κ°μ νμ κ² κ°μ΅λλ€.
(@URK96 λλ λμΌν©λλ€)
μ¦, λ³΄μ¬ μ£Όμ μ½λλ, μ
λ ₯μ΄ μλμ κ°μ κ²½μ°μλ κ°μ λ°ννμ§ μμ΅λλ€.
IEnumerable<int> Numbers()
{
while(true)
{
if (int.TryParse(Console.ReadLine(), out var number))
yield return number;
}
}
foreach (var n in Extract(Numbers()))
{
Console.WriteLine(n); // μ€νλμ§ μμ.
}
@dimohy λμ μ½λλ κ·Έλ¬ν κ°μ μ΄ μκΈ°μ μ μ λμν©λλ€.
5κ°μ μ’μμ
al6uiz
10
μ λ μ΅λν κ°λ¨νκ² ν λ² 
static IEnumerable<int> Extract(IEnumerable<int> numbers)
{
var prev = numbers.FirstOrDefault();
var prePrev = prev;
foreach (var current in numbers.Skip(1))
{
if (prePrev + 1 != prev && prev + 1 == current)
yield return prev;
(prePrev, prev) = (prev, current);
}
}
μ½μ μ
μΆλ ₯
-1
-1
-2
-1
>> -2
0
1
2
4
5
>> 4
6
8
8
9
>> 8
10
8κ°μ μ’μμ
URK96
11
μ, μ
λ ₯μΌλ‘ yield returnμ΄ λ€μ΄μ€λ Caseλ κ³ λ €λ₯Ό λͺ»νλ€μβ¦
λ¨μ νΈκΈ°μ¬μΌλ‘ μ°Έμ¬νλ κΈμΈλ° μμμΉ λͺ»νκ² νλ λ°°μκ°λ€μ κ°μ¬ν©λλ€ 
4κ°μ μ’μμ
컬λ μ
κ³Ό μνμ€λ₯Ό λΆλ¦¬ν΄μ μΆμνν μ£Όλ λ©΄λ°ν λ§μλλ€ λλ¬Έμ΄μ£ . ^^
4κ°μ μ’μμ
code
13
static void Main(string[] args)
{
//List<int> target = [-1, -1, -2, -1, 0, 1, 2, 4, 5, 6, 8, 8, 9, 10];
List<int> target = [1, 2, 5, 6, 8, 9, 10];
var result = target.Split(x =>
{
if (x == 0)
{
if (target[x + 1] == (target[x] + 1))
return true;
}
else if (target[x - 1] != (target[x] - 1))
return true;
return false;
}).Where(x => x.Count() > 1).Select(x => x.First());
foreach (var item in result)
Console.WriteLine(item);
}
public static class LinqExtention
{
public static IEnumerable<IEnumerable<TSource>> Split<TSource>(this IEnumerable<TSource> source, Func<int, bool> selector)
{
int? start = null;
for (int i = 0; i < source.Count(); ++i)
{
if (selector(i))
{
if (start == null)
{
start = i;
}
else
{
var temp = start;
start = i;
yield return source.Skip(temp.Value).SkipLast(source.Count()-i);
}
}
}
if (start < source.Count())
yield return source.Skip(start.Value);
}
}
μκ°λ³΄λ€ κΈ°λ€μβ¦;;
PS : Extract λΌκ³ λ§λλ κ±°μλ€μβ¦;; λλ
μ¦μ΄β¦;;
5κ°μ μ’μμ
IEnumerable<int> Extract(IEnumerable<int> numbers)
{
return numbers.Select((x, i) => new { x, i })
.GroupBy(x => x.x - x.i)
.Where(i => i.Count() > 1)
.SelectMany(item => item.Select((x, i) => new { x.x, i })
.GroupBy(x => x.x - x.i)
.Where(i => i.Count() > 1)
.Select(i => i.First().x));
}
Linq λ§ μ¨μ μ§λ΄€λλ° λ³΅μ‘ν΄μ λ§μμ μλλ€μ.
5κ°μ μ’μμ
μ°Έμ¬ κ°μ¬ν©λλ€.
κ·Έλ°λ°, λμνμ§ μμ΅λλ€.
GroupBy λλ¬ΈμΈ κ² κ°μ΅λλ€.
3κ°μ μ’μμ
μ μ»΄ν¨ν°μμλ μλλ λ° μ΄μνλ€μ.
3κ°μ μ’μμ
μ
λ ₯μ μλ μ½λλ‘ λ체ν΄λ³΄μκΈ° λ°λλλ€.
IEnumerable<int> Numbers()
{
while(true)
{
if (int.TryParse(Console.ReadLine(), out var number))
yield return number;
}
}
4κ°μ μ’μμ
Linq λ©μλλ μλμ§λ§, νμ¬κΉμ§ μ μλ μ½λ μ€, μ μΌνκ² μ μ λμνλ μ½λμ
λλ€. κ·Έ μ§§μ μκ°μ λλ¨νμλλ€.

μ λ κ±°μ λ°λμ κ±Έλ Έμ΅λλ€.
List<int> list = [-1, -1, -2, -1, 0, 1, 2, 4, 5, 6, 8, 8, 9, 10];
IEnumerable<int> Numbers()
{
while(true)
{
if (int.TryParse(Console.ReadLine(), out var number))
yield return number;
}
}
var results = Extract(list);
results = Extract([]);
results = Extract(Numbers());
3κ°μ μ’μμ
al6uiz
19
μ μ κΊΌλ λμ μνλμ??
4κ°μ μ’μμ
μ. μ€ν¨ μΌμ΄μ€κ° μμ΅λλ€.
보μ¬μ£Όμ μ
λ ₯ λ°μ΄ν°κ° μ΄ μΌμ΄μ€λ₯Ό μ¨κΈ°κ³ μλλ°, μμΈμ λ λ²μ§Έ μμμ μ²λ¦¬μ κ΄λ ¨μ΄ μμ΅λλ€.
3κ°μ μ’μμ