
코딩테스트에서 함수를 잘 몰라서 혹은 응용법을 잘 몰라서 때문에 로직이 복잡해지는 경우가 있죠? 이때 알아두면 좋은 기초 함수를 가져왔습니다.
// 최댓값, 최솟값
Math.Max(a, b) // 둘 중 큰 값
Math.Min(a, b) // 둘 중 작은 값
Math.Max(Math.Max(a, b), c) // 3개 중 최댓값
// 절댓값, 제곱근
Math.Abs(-5) // 5 (절댓값)
Math.Sqrt(16) // 4.0 (제곱근)
Math.Pow(2, 3) // 8.0 (2의 3제곱)
// 올림, 내림, 반올림
Math.Ceiling(3.2) // 4.0 (올림)
Math.Floor(3.8) // 3.0 (내림)
Math.Round(3.6) // 4.0 (반올림)
string str = "Hello World";
// 기본 정보
str.Length // 11 (길이)
str[0] // 'H' (인덱스 접근)
str.Contains("ell") // true (포함 여부)
// 변환
str.ToUpper() // "HELLO WORLD"
str.ToLower() // "hello world"
str.Replace("World", "C#") // "Hello C#"
// 분할/결합
str.Split(' ') // ["Hello", "World"]
string.Join(",", arr) // 배열을 ","로 연결
// 부분 문자열
str.Substring(0, 5) // "Hello" (시작인덱스, 길이)
str.Substring(6) // "World" (시작인덱스부터 끝까지)
// 찾기
str.IndexOf("o") // 4 (첫 번째 'o'의 인덱스, 없으면 -1)
str.LastIndexOf("o") // 7 (마지막 'o'의 인덱스)
int [] arr = {3, 1, 4, 1, 5};
// 정렬
Array.Sort(arr) // 오름차순 정렬
Array.Reverse(arr) // 배열 뒤집기
// 찾기
Array.IndexOf(arr, 4) // 2 (값 4의 인덱스, 없으면 -1)
Array.Exists(arr, x => x > 3) // true (조건 만족하는 요소 존재?)
// 복사
int[] copy = new int[arr.Length];
Array.Copy(arr, copy, arr.Length);
List<int> list = new List<int>();
// 추가/삭제
list.Add(1) // 끝에 추가
list.Insert(0, 5) // 특정 위치에 삽입
list.Remove(1) // 첫 번째로 발견되는 1 제거
list.RemoveAt(0) // 0번 인덱스 제거
list.Clear(0) // 모든 요소 제거
// 정보
list.Count // 개수
list.Contains(5) // 포함 여부
list[0] // 인덱스 접근
// 정렬/변환
list.Sort() // 오름차순 정렬
list.Reverse() // 뒤집기
list.ToArray() // 배열로 변환
Dictionary<string, int> dict = new Dictionary<string, int>();
// 추가/수정
dict["apple"] = 5 // 키-값 추가/수정
dict.Add("banana", 3) // 추가 (키가 이미 있으면 예외)
// 접근/확인
dict["apple"] // 5 (값 접근)
dict.ContainsKey("apple") // true (키 존재 여부)
dict.ContainsValue(5) // true (값 존재 여부)
dict.TryGetValue("apple", out int value) // 안전한 접근
// 정보
dict.Count // 개수
dict.Keys // 모든 키
dict.Values // 모든 값
// Queue (FIFO - 먼저 들어간 게 먼저 나옴)
Queue<int> queue = new Queue<int>();
queue.Enqueue(1) // 큐에 추가
int first = queue.Dequeue() // 첫 번째 요소 제거하고 반환
int peek = queue.Peek() // 첫 번째 요소 확인만 (제거 안함)
// Stack (LIFO - 나중에 들어간 게 먼저 나옴)
Stack<int> stack = new Stack<int>();
stack.Push(1) // 스택에 추가
int top = stack.Pop() // 맨 위 요소 제거하고 반환
int peek = stack.Peek() // 맨 위 요소 확인만
using System.Linq;
int[] numbers = {1, 2, 3, 4, 5, 6};
// 필터링
numbers.Where(x => x > 3) // {4, 5, 6}
numbers.Where(x => x %2 == 0) // {2, 4, 6} (짝수만)
// 변환
numbers.Select(x => x * 2) // {2, 4, 6, 8, 10, 12}
numbers.Select((x, i) => x + i) // 값과 인덱스 사용
// 집계
numbers.Sum() // 21 (합계)
numbers.Max() // 6 (최댓값)
numbers.Min() // 1 (최솟값)
numbers.Average() // 3.5 (평균)
numbers.Count(x => x > 3) // 3 (조건 만족하는 개수)
// 정렬
numbers.OrderBy(x => x) // 오름차순
numbers.OrderByDescending(x => x) // 내림차순
// 기타 유용한 것들
numbers.Take(3) // 처음 3개 {1, 2, 3}
numbers.Skip(2) // 처음 2개 건너뛰고 {3, 4, 5, 6}
numbers.First() // 1 (첫 번째, 없으면 예외)
numbers.FirstOrDefault() // 1 (첫 번째, 없으면 기본값)
numbers.Last() // 6 (마지막)
numbers.Any(x => x > 5) // true (조건 만족하는 게 하나라도 있나?)
numbers.All(x => x > 0) // true (모두 조건 만족하나?)
numbers.Distinct() // 중복 제거
// 문자열 - 숫자
int Parse("123") // 123 (문자열을 int로)
"123".ToString() // "123" (int를 문자열로)
Convert.ToInt32("123") // 123 (다른 방법)
// 안전한 변환
int.TryParse("123", out int result) // 변환 성공하면 true
// char - int
'5' - '0' // 5 (문자를 숫자로)
5 + '0' // '5' (숫자를 문자로)
// 2차원 배열 순회
for (int i = 0; i < arr.getLength(0); i++) // 행
for (int j = 0; j < arr.GetLength(1); j++) // 열
// 배열 초기화
int[] arr = new int[5]; // {0, 0, 0, 0, 0}
int[] arr = Enumerable.Repeat(1, 5).ToArray(); // {1, 1, 1, 1, 1}
int[] arr = Enumerable.Range(1, 5).ToArray(); // {1, 2, 3, 4, 5}
// 조건부 삼항 연산자
int result = condition ? valueIfTrue : valueIfFalse;
// null 체크 간단히
string result = str?.ToUpper() ?? "DEFAULT";
특히 꼭 외워두면 좋은 것들:
Math.Max/Min - 비교문 대신 쓰면 훨씬 깔끔LINQ의 Where, Select, Sum, Max - 배열 처리가 한 줄로!dictionary - 해시 문제는 거의 이걸로 해결Queue/Stack = BFS/DFS 문제 필수