본문 바로가기

C#46

정렬 알고리즘의 기초 2편 : 선택 정렬 (Selection Sort) 정렬 알고리즘의 두 번째 주제로 소개할 방식은 선택 정렬입니다.버블 정렬과 마찬가지로 단순한 구조를 가지고 있어, 알고리즘 학습 입문자에게 적합한 방식입니다.이번 글에서는 선택 정렬의 작동 원리와 구현 코드, 그리고 이 정렬에 ‘선택’이라는 이름이 붙은 이유를 함께 살펴보겠습니다. 선택 정렬이란?선택 정렬은 아직 정렬되지 않은 부분 중에서 가장 작은 값을 선택하여, 그 값을 앞쪽으로 이동시키는 방식입니다.즉, i번째 자리에 들어갈 값을 배열의 나머지 구간에서 '선택' 해서 자리를 바꾸는 것이 특징입니다.이 과정을 전체 길이만큼 반복하면 오름차순 정렬이 완성됩니다. 작동 방식 요약1. 현재 위치(i)를 기준으로, 그 뒤에 있는 값들 중 가장 작은 값을 찾습니다.2. 그 값의 위치(minIndex)를 기억.. 2025. 5. 4.
정렬 알고리즘의 기초 1편 : 버블 정렬 (Bubble Sort) 정렬 알고리즘은 프로그래밍에서 가장 기본적이고 중요한 주제 중 하나입니다.그중에서도 버블 정렬은 구조가 단순하고 이해하기 쉬워, 알고리즘 학습의 출발점으로 자주 사용됩니다.이번 글에서는 버블 정렬의 작동 방식과 구현 방법, 그리고 왜 ‘버블’이라는 이름이 붙었는지에 대해 소개드립니다. 버블 정렬이란?버블 정렬은 인접한 두 값을 비교하여 큰 값을 뒤로 보내는 방식의 정렬 알고리즘입니다.한 바퀴를 돌고 나면 가장 큰 값이 맨 뒤로 이동하게 되며, 이 과정을 반복함으로써 전체 배열이 정렬됩니다.이러한 과정에서 큰 수가 점점 뒤로 ‘떠오르는’ 모습이 거품(Bubble) 이 물 위로 올라가는 것과 비슷하기 때문에‘버블 정렬(Bubble Sort)’이라는 이름이 붙었습니다. 작동 방식 요약1. 왼쪽부터 인접한 두.. 2025. 5. 4.
C# 에서 temp 없이 값 교환하는 법, 이렇게 간단해도 될까요? C#을 처음 배울 때, 두 변수의 값을 서로 바꾸려면 보통 다음과 같이 작성했습니다.int temp = a;a = b;b = temp; 하지만 C# 7.0부터는 이 과정을 단 한 줄로 처리할 수 있습니다.(a, b) = (b, a); 왜 이렇게 되는 걸까요? 이 문법은 튜플 분해 할당(Tuple Deconstruction) 기능을 이용한 것입니다.• (a, b)는 왼쪽에 위치한 변수 그룹• (b, a)는 오른쪽에 위치한 값 그룹이 둘을 한 쌍으로 묶어 한 번에 할당하기 때문에 가능한 문법입니다.즉, (a, b) = (b, a); 는1. 오른쪽의 (b, a) 튜플을 먼저 평가한 다음2. 각각의 값을 왼쪽의 a, b에 동시에 할당하는 방식입니다. 이 구조 덕분에 temp 와 같은 임시 변수를 사용하지 않아.. 2025. 5. 4.
하드코딩으로 구현한 간단한 퀘스트 분기 처리 C# 에서 하드코딩으로 의사 결정 트리를 구성해보았습니다. 이 구조는 복잡한 if-else 대신, 조건과 결과를 분기 노드(DecisionNode) 형태로 깔끔하게 구성할 수 있어 가독성과 유지보수 측면에서 유리합니다. 퀘스트 트리플레이어의 상태에 따라 다음과 같은 분기를 수행하는 퀘스트 결정 트리를 만듭니다[레벨 ≥ 15?]├─ 예 → [고대 열쇠 + 왕의 인장 있음?]│ ├─ 예 → [튜토리얼 + 사이드미션1 완료?]│ │ ├─ 예 → 🎁 특별 퀘스트 지급: 왕의 시험│ │ └─ 아니오 → 📌 보조 퀘스트들을 먼저 완료하세요.│ └─ 아니오 → 🔑 필요한 아이템이 없습니다.└─ 아니오 → [VIP 토큰 있음?] ├─ 예.. 2025. 5. 2.
Dictionary 를 배열처럼 접근할 때 주의사항 C# 에서 Dictionary는 대괄호 [ ] 기호를 사용해 값을 가져오기 때문에 얼핏 보면 배열처럼 보입니다.그래서 처음에는 for (int i = 0; i 하지만 아래 코드를 보면, 배열처럼 접근하는 것이 왜 문제가 되는지 쉽게 이해할 수 있습니다. 실행시 오류가 나는 코드Dictionary numbers = new Dictionary() { { 1, "one" }, { 20, "twenty" }, { 3, "three" }, { 19, "nineteen" }, { 5, "five" }, }; for (int i = 0; i 이 코드는 실행과 동시에 다음과 같은 예외를 발생시킵니다The given key '0' was not present in the dictio.. 2025. 5. 2.
Parsing과 TryParse() 계열 함수들 Parsing 은 문자열을 특정 데이터 형식으로 변환하는 과정을 말합니다.예를 들어, 문자열 "123"을 정수형 int로 변환하는 것이 대표적인 예입니다.Parsing은 주로 입력 값 검증이나 데이터 변환을 위해 사용됩니다.문자열을 다른 형식으로 변환할 때, 특히 형 변환이 실패할 수 있는 경우를 대비하여 예외 처리를 고려해야 합니다. 예를 들어, "123"을 정수로 변환하는 건 문제가 없지만, "abc" 를 정수로 변환하려고 하면 예외가 발생할 수 있습니다. 이러한 예외를 처리하는 데 유용한 메서드가 바로 *TryParse()* 입니다. TryParse() 계열 함수들TryParse()는 형 변환이 실패할 가능성이 있는 경우 예외를 발생시키지 않고 안전하게 변환을 시도할 수 있는 메서드입니다. 형 변환.. 2025. 4. 30.