비트를 쪼개는 개발자

allen321@naver.com

분류 전체보기 82

C# [디자인 패턴] - 옵저버 패턴(Observer Pattern)

옵저버 패턴(Observer Pattern)이란?  옵저버 패턴(Observer Pattern)은 객체 간의 일대다 관계를 정의하여, 하나의 객체(주체, Subject)의 상태가 변경될 때, 이 상태를 관찰하는 여러 객체(옵저버, Observer)들에게 자동으로 알림을 보내는 디자인 패턴이다.  Observer Pattern은 크게 Subject(주체) 파트와 Observer(관찰자) 파트로 구성된다,Subject(주체): 상태를 관리하며, 상태 변화 시 옵저버들에게 알림을 보내는 역할을 수행한다.Observer(옵저버): 주체의 상태 변화를 관찰하며, 변경 사항을 수신하는 역할을 수행한다.객체 간의 느슨한 결합을 유지하면서도 효율적으로 상태 변화를 처리할 수 있는 디자인 패턴이다.유니티 엔진의 Unit..

C# 2024.10.04

알고리즘 - 투 포인터(Two Pointer) / 슬라이딩 윈도우(Sliding Window)

투 포인터란?  투 포인터 알고리즘은 배열이나 리스트에서 사용할 수 있는 탐색 기법이다.주로 정렬된 배열이나 리스트에서 연속적인 구간에서 합이나 원소를 찾아내는데 아주 유용한 알고리즘이다.특정한 두 원소의 합을 구한다고 가정하면 완전 탐색의 경우에는 O(n2)의 시간 복잡도가 발생하지만 투 포인터로 이를 해결하면 O(n)의 시간 복잡도가 발생한다. 투 포인터의 기본 개념 투 포인터는 제목과 비슷하게 배열의 양 끝에 두개의 포인터를 이용하는 기법이다.좌우 의 포인터는 양 끝에서 시작해서 특정 원소를 찾을때 까지 가운데로 이동하며 진행한다.배열이나 리스트의 요소가 정렬 되어 있어야 사용이 가능하다. 투 포인터 사용 예시 배열의 여러 숫자 원소가 담겨있고 해당 원소 중 두 수의 합과 특정한 숫자가 일치하는 경..

알고리즘 2024.10.01

알고리즘 - 그리디(Greedy)

그리디 알고리즘이란? 그리디 알고리즘은 매 순간 가장 최적의 선택을 하는 방식의 알고리즘이다.계산이 빠르고 구현이 간단하다.DP(동적 계획법)에서 사용했던 타뷸레이션이나 메모이제이션과 같은 안전장치가 없기 때문에 결과적으로 최선의 답을 보장하지는 못한다.탐욕 선택 속성(Greedy Choice Property)과 최적 부분 구조(Optimal Substructure)를 만족하는 문제에 적용이 가능한 알고리즘이다.   그리디 사용 예제 그리디 알고리즘은 길 찾기(다익스트라) 문제나 동전 거스름돈 문제, 혹은 최적의 적재 무게를 찾는 문제와 같이 최적의 선택이 최적의 해로 이어지는 문제들에 적합하다.  회의실 문제 예시 코드 해당 문제는 회의실을 예약을 희망하는 여러 인원 중 회의실에서 최대한 많은 회의를 ..

알고리즘 2024.09.30

C# - LINQ(Language Integrated Query)

LINQ(Language Integrated Query)란? LINQ는 개발자가 다양한 데이터(컬렉션, 데이터베이스, XML 등)에 대해 일관된 방식으로 쿼리*하고 조작할 수 있도록 지원하는 기능이다.C#에서 LINQ 기능은 .NET 프레임워크의 일부로 제공되며 "using System.Linq;" 구문을 사용하여 System.Linq 네임스페이스에서 제공된다.LINQ는 다양한 데이터 소스에 따라 "LINQ to Objects" (List, Array 등), "LINQ to SQL" (SQL 데이터베이스 쿼리), "LINQ to XML" (XML 데이터 쿼리), "LINQ to DataSet" 등과 같이 여러 확장 기능을 제공한다.즉 LINQ를 사용하는 이유는 다양한 데이터 소스를 일관적이고 가독성 좋게..

C# 2024.09.24

C# - 예외 처리 (try ~ catch)

예외 처리(Exception Handling)란? 예외 처리란 프로그램 실행 중에 발생할 수 있는 의도치 않은 오류 상황이나 프로세스가 발생할 때 이를 관리하고 제어하기 위한 일종의 메커니즘이다. "예외"라는 것은 내가 의도한 프로그램의 정상적인 흐름을 방해하는 요소이며 예외 처리를 해 놓으면 이를 통해 오류를 적절하게 처리할 수 있다. Try와 Catch, 그리고 Finally 키워드는 C# 뿐만 아니라 자바와 파이썬 등 여러 언어에서 사용하는 예외 처리용 키워드다.   Catch에서 Exception 클래스를 상속받거나 사용 가능한 예외 타입 목록 - 일반적인 예외  Exception: 모든 예외를 포괄적으로 처리하는 기본 클래스, 모든 예외를 잡을 때 사용한다.SystemException: CLR(..

C# 2024.09.19

C# [프로그래머스] Lv.2 괄호 회전하기

문제 설명 괄호 회전하기 라는 제목이여서 문제를 처음에 잘못 접근했었다. 사실 괄호를 회전하는게 아니라 문자열로 받아온 괄호의 순서를 하나씩 앞으로 당긴다고 생각하고 문제를 접근해야 한다. s라는 문자열로 여러가지 모양의 괄호가 담긴 문자열을 분석해서 각 괄호가 모두 짝이 맞는 모양인지 검사해야 한다. 만약 "[ , ] , ( , ) , { , } "이런 문자열이라면 각각 모두 괄호가 짝을 이뤘으므로 올바른 괄호가 완성되었다고 판단한다. 또한 괄호와 괄호 사이에 " { , [ , ] , }" 이런식으로 첫 괄호와 다른 모양의 괄호가 완성된 형태로 남아있고 완성시킬 수 있다면 이 또한 올바른 괄호로 판단한다. 즉 "올바른 괄호 문자열"이란 사용된 모든 괄호가 제대로 짝을 이룬 문자열인지를 검사하라는 뜻이다..

코딩테스트 2024.09.16

C# [HackerRank] Algorithm(Data Structures) - Counting Valleys

문제       문제 설명  주어진 Input에 따라 '계곡'(Valley)의 갯수를 체크해야 하는 문제이다. 처음에는 '계곡'에 대한 설명이 명확하지가 않아서 '\'과 '/'를 이루는 갯수의 합 즉 '\/'이 몇개인지를 체크하는 문제인줄 알고 풀었는데 테스트를 통과하지 못해 조금 더 자세히 문제를 분석했다. 최종적으로 이 문제가 원하는 답은 해수면에 해당하는 '- -' 밑으로 내려가서 해수면 밖으로 나오는 횟수를 체크하라는 말이었다. 위 Explanation에 나온 예시로 보자면 시작점과 끝점인 -- 를 기준점으로 삼고 그 기준점을 몇번이나 내려간 후 올라오는지 체크해야 한다. 코드 작성 시간 보다 문제를 다시 읽어보고 체크하는 시간이 오래 걸렸는데 이런 문제는 조금 더 명확하게 설명을 해주면 좋겠다는..

코딩테스트 2024.09.11

통신 - REST, REST API

REST란? REST는 클라이언트와 서버가 데이터를 주고 받는 형식 중 하나다.REST(Representational State Transfer)는 분산 시스템, 특히 웹(WWW)과 같은 네트워크 상의 자원(resource)을 정의하고 자원에 대한 주소(URI)를 지정하는 아키텍처 스타일이다. REST는 웹의 원칙과 HTTP 프로토콜을 그대로 활용하여 클라이언트-서버 간에 데이터를 전송하는 통신 방식 중 하나다.REST는 자원(Response), 행위(Verb), 표현(Representation)으로 구성된다.REST에서 CRUD Operation*은 HTTP 메서드 형식인 POST, GET, PUT, PATCH, DELETE로 매핑되어 동작한다. CRUD Operation이란? - CRUD Operat..

통신 2024.09.10