문자열 변환 없이 각 자릿수 분리
·
📖TIL/✅CodingTest
자릿수 더하기프로그래머스의 문제 중 하나이다.https://school.programmers.co.kr/learn/courses/30/lessons/12931매개변수 N 이 주어지면 N 의 각 자릿수의 합을 구하는 문제이다.내가 생각한 방법은 이렇다.받아온 매개변수 int n 을 string 으로 변환변환한 string 을 foreach 를 사용해 char 로 하나씩 가져오면서 answer 에 += 대입answer 반환using System;public class Solution { public int solution(int n) { int answer = 0; string text = n.ToString(); foreach(char c in text) ..
LINQ
·
⭐C Sharp/14. LINQ
LINQ ( Language Integrated Query )데이터베이스를 위한 프로그래밍에서는 자료의 탐색 , 필터링 , 정렬 등의 기능을 많이 사용한다.데이터베이스에 있는 자료를 찾고 , 걸러내고 , 필요하다면 순서대로 나열하는 것이 데이터베이스에서 필요한 데이터를 뽑아내는 방법이기 때문이다. 자료에 대한 취급을 더 쉽게 하기 위해 데이터베이스에서는 LINQ 기능을 사용한다.LINQ 는 컬렉션에 들어있는 데이터를 더 편하게 검색 , 필터링 , 정렬 , 변환할 수 있도록 도와주는 C# 기능이다.배열이나 리스트에 데이터가 많아질수록 원하는 값을 직접 찾기 위해 반복문과 조건문을 계속 작성해야 한다.이때 LINQ 를 사용하면 같은 작업을 더 짧고 읽기 쉬운 코드로 표현할 수 있다.using System.C..
튜플 ( Tuple )
·
⭐C Sharp/07. 메서드(함수)
튜플 ( Tuple )게임을 만들다보면 여러 값을 한 번에 묶여서 다뤄야 하는 경우가 있다.예를 들어 캐릭터의 좌표라면 x , y 값을 함께 다뤄야 하고, 체력 정보라면 hp , maxHp 값을 함께 전달해야 할 수 있다.이럴 때마다 클래스를 만들거나 구조체를 정의하면 코드가 복잡해질 수 있다.반대로 값들을 따로따로 전달하면 관련 있는 데이터라는 의미가 약해진다.이런 상황에서 간단하게 여러 값을 하나로 묶어 사용할 수 있는 기능이 바로 튜플 ( Tuple )이다.튜플은 여러 개의 값을 하나의 데이터처럼 묶어서 사용하는 자료형이다.서로 다른 타입의 값도 함께 묶을 수 있으며, 간단한 데이터 묶음을 만들 때 클래스나 구조체를 새로 정의하지 않고도 사용할 수 있는 가벼운 방법이라고 볼 수 있다.예를 들어 다음..
C# / Unity 통상 질문
·
📖TIL/🎤Interview
23년 ~ 24년 C# / Unity 통상 질문 객체지향에 대하여 설명 ( 필수 )객체지향의 정의는 물론, 객체라는 단어의 뜻 자체를 먼저 본인만의 단어로 설명할 수 있어야 한다.SOLID원칙, 4대 특징에 대하여 설명하면 된다.추상, 상속, 다형성, 캡슐화 등, 특성을 설명하실 때, 꼬리물기를 대비하여 캡슐화를 위한 프로퍼티 사용이나, 다형성을 활용하기 위한 오버라이딩 재정의, 인터페이스 등 활용 사례를 꼭 생각해두는 것이 좋다. 깊은 복사와 얕은 복사에 대하여 설명본인만의 단어로 설명을 준비하되, 본인이 구현하였던 사례가 있다면 첨부하는 것이 좋다.ICloneable 을 활용했다면, 클론 및 얕은, 깊은 복사 구현 내역을 설명하시면 좋다.활용한 기능은 없었지만 알고 있다는 것을 표현해도 좋다.참조형과..
면접 질문
·
📖TIL/🎤Interview
C# 23년 ~ 24년 면접 질문 ▼ Question 다음 코드의 출력값은 무엇인가요?using System;class Program{ static void Main(string[] args) { string a = "잘"; string b = a; b = "모르겠습니다"; Console.WriteLine(a + b); }} ▼ Answer더보기출력 값 : 잘모르겠습니다 풀이 : string a = "잘" a 에는 "잘"이 들어간다.string b = a;이 시점의 b 도 "잘"이 됀다.b = "모르겠습니다";이제 b 는 "모르겠습니다" 로 바뀐다.하지만 a 는 그대로 "잘" 이다.Console.WriteLine( a + b )a 와 b ..
깊이 우선 탐색 ( DFS )
·
📊Algorithm/탐색
깊이 우선 탐색 ( DFS , Depth - First Search )자료구조 내에서 찾고자 하는 데이터를 찾는 방식은 여러 알고리즘과 기법이 존재한다.깊이 우선 탐색은 그래프 탐색 알고리즘 중 하나이다.한 방향으로 갈 수 있는 곳까지 계속 탐색한 다음 , 막히면 다시 이전 분기점으로 돌아와 다른 경로를 탐색한다.이런 방식은 트리 구조 탐색 뿐만 아니라 , 미로 찾기 , 경로 탐색 , 사이클 검사 등 다양한 문제에 사용된다. 현재 정점에서 탐색을 시작해서 갈 수 있는 곳까지 계속 내려가며 탐색한다.더 이상 갈 곳이 없으면 되돌아가 다른 경로로 탐색을 이어나간다.한 경로를 끝까지 파고들어가기 때문에 "깊이 우선" 이라는 이름이 붙었다.탐색의 흐름은 재귀함수 호출 또는 스택 자료구조를 이용해 구현할 수 있다..
불변 ( Immutable )
·
⭐C Sharp/11. 객체 지향
불변 ( Immutable )프로그래밍을 하다 보면 한 번 만들어진 데이터가 절대 바뀌지 않는 경우들을 보게 된다.문자열을 조작하려고 했는데 원본이 그대로인 경우가 발생하는데 이런 현상이 바로 불변 특성 때문이다 정의불변은 "한 번 생성된 객체의 상태가 절대 변경되지 않는다" 는 특성이다.객체가 만들어진 후에는 내부 데이터를 수정할 수 없고 , 수정하려고 하면 새로운 객체가 생성된다.대표적인 불편 타입으로는 string , delegate 그리고 대부분의 값 타입들이 있다. 예시 코드string original = "HoChan";string modified = original + " Blog";Console.WriteLine(original); // "HoChan" (원본 그대로)Console.W..
Dictionary<TKey, TValue>
·
⭐C Sharp/15-1. 제네릭
DictionaryDictionary는 C# 에서 가장 많이 쓰는 저장소 자료구조 ( Data Structure )이다.자료구조 중에서 데이터를 Key 와 Value 의 쌍으로 저장하는 해시 테이블을 기반으로 하는 제네릭 컬렉션이다.배열이나 리스트처럼 순서로 접근하는 방식이 아니라 고유한 키 ( Key )를 통해 값 ( Value )을 빠르게 조회할 수 있다.상황Dictionary 적합이유특정 값을 이름 또는 ID 로 빠르게 찾기적합하다O(1) 시간에 바로 접근 가능키가 중복되면 안되는 경우적합하다딱 한 키에 한 값만 저장된다순서가 중요할 때적합하지 않다삽입 순서를 보장하지 않는다→ 배열처럼 인덱스로 찾는 게 아니라 , 키로 직접 접근하는 방식이다.→ 키는 중복될 수 없고 , 값을 빠르게 찾거나 수정할 ..
A-Star ( A* )
·
📊Algorithm/탐색
A-Star 알고리즘 ( A* )A-Star 알고리즘은 게임 개발이나 인공지능에서 가장 자주 쓰이는 경로 탐색 알고리즘이다.유니티의 NavMesh 같은 시스템도 기본적으로 A* 의 원리를 기반으로 만들어졌다.이름A-Star ( A* ) 알고리즘목적출발지에서 목적지까지 최단 경로를 찾기특징현재까지의 거리 + 앞으로의 예측 거리를 동시에 고려사용 예시미로 찾기 , 길 찾기 AI , NPC 이동 , RTS 유닛 이동 등자료구조우선순위 큐 ( Priority Queue ) 또는 Open / Closed List 사용 A* 는 각 노드의 점수를 계산하면서 최적의 경로를 탐색한다. 1. 점수 계산식각 노드마다 세 가지 값을 계산한다.f(n) = g(n) + h(n)g(n)시작점에서 현재 노드까지의 실제 비용 ( ..