인덱스가 1부터 시작하는 구조에서는 Array를 사용한다.
크기 고정이 보장된 경우에는 일차원 배열을 사용하고, 그렇지 않은 경우에는 List로 사용한다.
순회하면서 조건에 맞게 제거해야 하는 경우는 LINQ를 이용한다.
var list = new List<int>();
list = list.Where(x => x != t).ToList();
List도 내부에 Array를 두기 때문에 메모리에서 연속적으로 존재한다.
ContainsKey를 회피하기 위해 value(int)를 0으로 초기화 하는 방식은 매우 중요하다.
void Main()
{
var dict = new Dictionary<char,int>();
for(char tmp = 'a'; tmp<='z'; tmp++)
{
dict[tmp] = 0;
}
dict['c'].Dump(); // result : 0
}
Dictionary<Key , Dictionary<k,v>>은 가독성 및 구현이 최악이므로 되도록 사용하지 않는다. 문제를 다시 읽고 재설계해라.
해시 기반이므로 조회한 Key의 이전 key 또는 다음 Key는 알 수 없다.
해시 기반이므로 정렬의 개념은 없다. 그러므로 LINQ의 OrderBy는 IEnumerable 타입의 시퀀스를 만들어 내는 거다.
TryGetValue() 가 좋지만 ContainsKey()를 이용해서 값을 찾는다. ⇒ O(1) * 2
if (dict.ContainsKey(key))
{
dict[key] += 1;
}
else
{
dict[key] = 1;
}
Value로 Key를 조회하는 방법
문자열 LookUp의 경우 엄밀히 말하면 O(L) + O(1)이다.