TIL

2024.2.28

새벽이슬방울 2024. 2. 28. 09:51

코드 카타 중에서 항상 for문을 이용해서 만들었던 부분을 다른 방법으로 작성해주신 것을 찾아보게 되었습니다.

친절하게 주석으로 똑같은 의미의 for문에 대해서 정리를 해주셨기 때문에 가져오게 되었습니다.

 


 

1. 배열에 같은 값 넣어주기.

int[] have = new int[n];
for(int i = 0; i < n; i++)
{
    have[i] = 1;
}

 

int[] have = Enumerable.Repeat(1, n).ToArray();

System.Linq 에 있는 Enumerable은 Repeat와 Range를 가지고 있습니다.

 

Enumerable.Repeat(반복 시킬 값, (int)반복할 횟수) : 반복할 횟수만큼 값을 반환합니다. 반복시킬 값의 타입은 상관없습니다.

Enumerable.Range((int)시작값, (int)생성할 갯수) : 시작값에서 갯수만큼 1씩 증가하여 값을 반환합니다.

 

생성하고 반환하기 때문에 배열 또는 리스트에 저장시켜줘야합니다.

ToArray or ToList

 


 

2. 특정 조건의 값의 증가, 감소

for(int i = 0; i< reserve.Length; i++)
{
    have[reserve[i] - 1]++;
}

 

reserve.Select(i => have[i - 1]++).ToArray();

int[] reserve의 값(have의 index + 1 값) i를 가지고 와서 have[i - 1]의 값을 증가시켜줍니다.

이때 .ToArray를 하지 않게 된다면 람다식에서 증가시킨 값은 have에 적용되지 않습니다.

 


 

3. 특정 조건에 맞는 갯수 구하기

for(int i = 0; i < have.Length; i++)
{
    if(have[i] >= 1) answer++;
}

 

person.Where(x => x >= 1).Count();

Where은 람다식을 이용하거나, 그냥 조건을 넣으면 조건에 맞는 인덱스 값을 반환합니다.

원하는 것은 조건에 맞는 인덱스 값이 아닌, 인덱스의 갯수이므로 Count를 이용해서 계산해줍니다.