비트를 쪼개는 개발자

allen321@naver.com

2024/09 9

알고리즘 - 그리디(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

C# [HackerRank] Algorithm(String) - Strong Password

문제 설명 Louise라는 친구가 SNS 사이트에 가입하면서 설정하는 비밀번호에 관한 문제다. 다만 비밀번호를 설정할때 몇 가지의 제한사항이 있는데, 이 제한사항을 만족하는 비밀번호를 만들어야 한다. 각 조건은 다음과 같다.  비밀번호의 길이가 최소 6자 이상이어야 함.최소 하나의 숫자가 포함되어 있어야 함최소 하나의 소문자 영어 문자가 포함되어 있어야 함최소 하나의 대문자 영어 문자가 포함되어 있어야 함최소 하나의 특수문자가 포함되어 있어야 함 (특수문자는 "!@#$%^&*()-+")  해당 조건을 충족하지 않는다면 조건을 충족해야 하는 최소한의 문자의 갯수를 return 해야 한다.  Sample 예시를 살펴보면 문자의 길이는 3이며, String은 "Ab1"로 구성된다. 일단 문자에 포함되야 하는 ..

코딩테스트 2024.09.06

C# [프로그래머스] Lv.3 입국심사

문제 설명 입국 심사를 기다리는 사람들이 입국 심사에 걸리는 최소한의 시간을 계산해야 하는 문제다. 입국 심사를 기다리는 사람은 최대 10억명이고, 심사관의 숫자는 10만명 이하, 그리고 심사관 한명이 입국 심사에 걸리는 시간은 최대 10억분까지도 걸릴 수 있는 제한사항이 주어진다. 얼핏 봐도 최적화가 중요한 문제이고 역시나 완전 탐색으로 먼저 풀어보니 1분마다 시간을 계산해서는 시간복잡도에서 높은 확률로 통과하지 못하는 문제였다.  최적화를 어떻게 시킬까 고민하다가 이분 탐색(이진 탐색) 기법을 사용해서 중간 시간 값을 체크해서 경우의 수를 줄여나가는 방법으로 접근했고 다음과 같은 방식으로 풀어보았다.   해당 코드public static long solution(int n, int[] times){ ..

코딩테스트 2024.09.05