코딩 블로그
-
[C#] List 검색 메서드 (Contains(), Exists(), Find())
C# List는 List에 특정 값이 존재하는지 확인하는 메서드가 여러개 있다.그중 Contains(), Exists(), Find()에 대해 알아보겠다. Contains vs Exists vs Find List.Contains(T)단순히 매개변수의 내용을 포함하는 요소가 List에 있는지 여부를 확인한다.있으면 True, 없으면 False를 반환한다.List.Exists(Predicate)특정 값을 찾기 위한 조건과 일치하는 요소가 List에 포함되어 있는지 여부를 확인한다.있으면 True, 없으면 False를 반환한다.List.Find(Predicate)특정 값을 찾기 위한 조건과 일치하는 요소가 List에 처음으로 검색된 요소를 반환한다.검색되지 않으면 T형식의 기본값이 반환된다.아래 클래스는 이..
2025.01.09
-
[알고리즘] 누적합 (Prefix Sum)
누적합(Prefix Sum)은 배열 또는 리스트 등에서 일정 구간의 합을 빠르게 계산하기 위한 방법이면서 동적 계획법(DP)의 형태 중 하나이다.기본적인 방식은 각 요소까지의 누적합을 계산하여 이를 배열에 저장해 두는 것이다. 이후 특정 구간의 합을 구할때 저장해둔 배열을 사용한다. 더보기동적계획법(DP, Dynamic Programming)여기서 동적계획법을 간단히 설명하면 DP, 즉 Dynamic Programming의 줄임말로 기본적인 아이디어는 하나의 큰문제를 여러 개의 작은 문제로 나누어서 해결하고 그 결과를 저장하여 다시 큰 문제를 해결할 때 사용하는 것이다.DP는 특정한 알고리즘이 아닌 문제해결 패러다임으로 해당 이름은 큰 의미가 없이 지어졌다고 한다. 누적합 조건 누적합은 배열의 값들이 변..
2025.02.10
-
[C#] string.Split() + StringSplitOptions
string의 메서드 중 split에 대해 좀 더 자세히 다루기 위해 따로 기록한다. ● Split(char[]|string[], *count, *option) 기준 문자 기준으로 문자열을 잘라 문자열로 반환하는 string 메서드 *은 생략이 가능한 매개변수 매개변수- char[]|string[] : 기준 문자|기준 문자열문자열을 자를때 기준이 되는 문자열, 기준이 한개면 사용하면 배열이 아니어도 상관없다. - *count : 반환할 부분 문자열 최대 수해당 수 만큼만 문자열을 잘라 준다. - *option : 빈 문자열 옵션StringSplitOptions의 필드None: 문자열을 분리할 때 기본 옵션을 사용한다.RemoveEmptyEntries: 문자열을 분리할 때 빈 문자열은 제거한다TrimEn..
2024.07.31
-
[C#] 대문자, 소문자로 변환하기 (ToUpper(), ToLower())
1. 문자열 대문자로 변환대문자 변환은 ToUpper 메서드를 사용하면 된다. 2. 문자열 소문자로 변환소문자 변환은 ToLower 메서드를 사용하면 된다.string abc = "abc";abc = abc.ToUpper();Console.WriteLine(abc); // ABCabc = abc.ToLower();Console.WriteLine(abc); // abc 영문을 제외하고 숫자나 다른 문자들은 그대로 나온다.string a11b = "a11b";Console.WriteLine(a11b.ToUpper()); // A11B개인적으로는 회사 업무할 때 사용자들이 입력 값을 이나, 다른 플랫폼에서 가져온 데이터들의 컬럼 이름을 비교 할때 첫글자를 대문자로 한다던가, 전부 대문자로 한다던가, 카멜케이스..
2025.06.19
-
[C#][프로그래머스] 카드 뭉치
프로그래머스 > 코딩테스트 연습 > 연습문제 > 카드 뭉치 https://school.programmers.co.kr/learn/courses/30/lessons/159994 📒 문제코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다.원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다.한 번 사용한 카드는 다시 사용할 수 없습니다.카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다.기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다.예를 들어 첫 번째 카드 뭉치에 순서대로 ["i", "drink", "water"], 두 번째 카드 뭉치에 순서대로 ["want", "..
2024.08.22
-
[C#][프로그래머스 > 코딩테스트 기초] 배열의 원소 삭제하기
프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 배열의 원소 삭제하기 https://school.programmers.co.kr/learn/courses/30/lessons/181844 📒 문제정수 배열 arr과 delete_list가 있습니다. arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요. 제한사항1 ≤ arr의 길이 ≤ 1001 ≤ arr의 원소 ≤ 1,000arr의 원소는 모두 서로 다릅니다.1 ≤ delete_list의 길이 ≤ 1001 ≤ delete_list의 원소 ≤ 1,000delete_list의 원소는 모두 서로 다릅니다. 입출력 예arrdelet..
2024.08.12
-
[C#] ProcessStartInfo 클래스
ProcessStartInfo 클래스는 프로세스를 시작할 때 사용되는 정보를 포함하는 클래스입니다. 이 클래스는 프로세스의 이름, 인수, 작업 디렉토리, 우선순위 등 다양한 속성을 제공하여 프로세스를 시작하는 데 필요한 정보를 지정할 수 있다.ProcessStartInfo 클래스의 속성FileName: 시작할 프로세스의 이름을 지정합니다.Arguments: 프로세스에 전달할 인수를 지정합니다.WorkingDirectory: 프로세스의 작업 디렉토리를 지정합니다.PriorityClass: 프로세스의 우선순위를 지정합니다.WindowStyle: 프로세스의 창 스타일을 지정합니다.CreateNoWindow: 프로세스가 창을 생성하지 않도록 지정합니다.ProcessStartInfo 클래스의 사용 예시using ..
2025.04.10
-
[C#] 연산자 오버로딩 (Operator Overloading)
C#에는 연산자 오버로딩을 제공한다. 연산자 오버로딩이란?C#에서 제공하고 있는 연산자에 대해 기능을 다시 부여하는 것을 의미한다.기본 문법 형태는 public static [리턴속성] operator [연산자](매개변수1, 2) 이다. 예를 들어 이런 Person 이란 클래스가 있다고 가정을 할때 Person p1 = new Person();Person p2 = new Person();Console.WriteLine(p1 + p2); // Error 이런식으로 더하기를 하면 당연히 컴파일 오류가 발생할 것이다. 하지만 두 Person이 나이의 합을 반환하고 싶다면 어떻게 해야할까addPerson 이란 메서드를 만들어 addPerson(p1, p2) 이런식으로 사용 할 수 도 있지만두 사람의 나이가 아닌..
2024.12.11
-
[C#][프로그래머스] 소수 찾기
프로그래머스 > 코딩테스트 연습 > 연습문제 > 소수 찾기 https://school.programmers.co.kr/learn/courses/30/lessons/12921 📒 문제1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한사항n은 2이상 1000000이하의 자연수입니다. 입출력 예nresult10453 입출력 예 설명 입출력 예 #11부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환입출력 예 #21부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환💻 소스코드using System;using System.Linq;publ..
2024.08.26
-
[C#][프로그래머스 > 코딩테스트 기초] 더 크게 합치기
프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 더 크게 합치기https://school.programmers.co.kr/learn/courses/30/lessons/181939 📒 문제연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다. 12 ⊕ 3 = 123 3 ⊕ 12 = 312 양의 정수 a와 b가 주어졌을 때, a ⊕ b와 b ⊕ a 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요. 단, a ⊕ b와 b ⊕ a가 같다면 a ⊕ b를 return 합니다. 제한사항1 ≤ a, b 입출력 예abresult991991898898 입출력 예 설명 입출력 예 #1a ⊕ b = 991 이고, b ⊕ a = 919 입니다..
2024.07.23
최신 글
-
[Spring] yaml 설정
SpringBoot에 application.yaml은 Spring 프로젝트를 설정하기 위해 사용된다고 생각하면된다. (prot, database 연결, 인코딩...) 기존엔 xml을 많이 사용했는데 지금은 ,yaml을 더 많이 사용한다.yaml이 xml보다 데이터가 덜 무겁기 때문이다.xml 보다 경량 데이터 = json 보다 경량 데이터 = yaml 특징키 값에 쌍따옴표x (json엔 필요)key와 value 사이엔 무조건 " "(스페이스 한칸)중괄호를 쓰지않고 들여쓰기로 구분, 들여쓰기는 " "(스페이스 두칸)스페이스 공간을 지키지 않으면 파일 실행x 기존 Spring 레거시와 비교application.yaml = web.xml + root-context.xml + servlet-context.x..
2025.06.26
-
[C#] 대문자, 소문자로 변환하기 (ToUpper(), ToLower())
1. 문자열 대문자로 변환대문자 변환은 ToUpper 메서드를 사용하면 된다. 2. 문자열 소문자로 변환소문자 변환은 ToLower 메서드를 사용하면 된다.string abc = "abc";abc = abc.ToUpper();Console.WriteLine(abc); // ABCabc = abc.ToLower();Console.WriteLine(abc); // abc 영문을 제외하고 숫자나 다른 문자들은 그대로 나온다.string a11b = "a11b";Console.WriteLine(a11b.ToUpper()); // A11B개인적으로는 회사 업무할 때 사용자들이 입력 값을 이나, 다른 플랫폼에서 가져온 데이터들의 컬럼 이름을 비교 할때 첫글자를 대문자로 한다던가, 전부 대문자로 한다던가, 카멜케이스..
2025.06.19
-
[C#] OnPropertyChanged 메서드
OnPropertyChanged 메서드는 C#에서 데이터 바인딩과 MVVM 패턴(Model-View-ViewModel)을 사용할 때 중요한 역할을 한다. 속성 값이 변경되었음을 알리는 역할을 하는 메서드이다. 특히 WPF, UWP와 같은 XAML 기반 UI 프레임 워크에서 데이터 바인딩을 사용할 때, 뷰(View)에 변경 사항을 자동으로 반영하기 위해 사용된다. 코드 예시class Player{ private string name; public string Name { get { return name; } set { name = value; OnPropertyChanged(); } } ..
2025.06.18
-
[HTTP] MIME TYPE
https://developer.mozilla.org/ko/docs/Web/HTTP/Guides/MIME_types/Common_types 일반 MIME 타입 - HTTP | MDN다음은 일반적인 확장자로 정렬된, 문서 타입과 관련된 MIME 타입의 포괄적인 목록입니다.developer.mozilla.orgMIME TYPE이란?Multipurpose Internet Mail Extensions TYPE의 약자HTTP 통신을 할때 Body에 담긴 데이터의 타입을 전달하기 위해 사용된다. MIME TYPE 구조MIME TYPE은 일반적으로 '/'로 구분된 'type' 과 'subtype'으로 이루어져 있다.type/subtype type은 text나 image, video 같은 큰 범위의 타입이 들어가고su..
2025.06.17
-
[Spring] 패키지명을 통일해야하는 이유
스프링에서 개발을 할때 패키지명을 일반적으로 com.example.xxx.controller, com.example.xxx.service 처럼최초에 프로젝트를 생성할때 com.example.xxx 까지 지정해 둔다.위 사진을 보면 com.cos.blog가 기본 패키지명인데, com.costest라고 마음대로 패키지명을 설정해두었다.이렇게 패키지명을 설정하면 안되는 이유를 알아보겠다.그 이유를 알기 위해서는 스프링의 특징 중 한가지에 대해 알아야하는데, IoC(제어의 역전)의 특징을 가지고 있다는 것이다. IoC (Inversion of Control) 란?사용자가 객체를 new XX()해서 생성하는게 아니라 스프링에서 객체를 생성해서 관리하는 것이다. IoC를 이용해서 관리하는 이유?1. 싱글톤을 이용해..
2025.06.04
-
[MYSQL] 문자열 자르기 (SUBSTRING, SUBSTR, LEFT, RIGTH, SUBSTRING_INDEX)
SQL을 사용할 때 문자열을 일부만 잘라서 사용해야할 때가 있다.이럴때 사용할 수 있는 SQL 함수들에 대해 알아보겠다. 문자열을 볼때 INDEX를 알아야 함수들을 사용하기 편한데, 왼쪽에서 부터 1, 2, 3.. 으로 진행된다.예를 들어 "HELLO WORLD"라는 문자열이 있을때 "E"의 위치는 2이고, 두번째 "O"의 위치는 8이다. ✔ SUBSTRINGSUBSTRING(STRING, START, LENGTH)STRING을 원하는 시작점에서 원하는 길이만큼 잘라낼 수 있다. START와 LENGTH는 시작점과 길이를 나타낸다. ✔ SUBSTRSUBSTR(STRING, START, END)STRING을 원하는 시작점에서 원하는 끝점까지 잘라낸다. START와 END는 시작점과 끝점을 나타낸다. ✔..
2025.05.22
-
[MYSQL][프로그래머스] 중복 제거하기
프로그래머스 > 코딩테스트 연습 > SUM, MAX, MIN > 중복 제거하기 https://school.programmers.co.kr/learn/courses/30/lessons/59408 📢 문제 설명ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.Column nameTypeNullableANIMAL_IDVARCHAR(N)FALSEANIMAL_TYPEVARCHAR(N) FA..
2025.05.21
-
[MYSQL] 날짜 포맷 (DATE_FORMAT)
MySQL에서 날짜 포맷을 변경하려면 DATE_FORMAT 함수를 사용하면된다. DATE_FORMAT을 사용하려면 포맷 문자를 알아야한다.아래의 포맷문자와 '/', '-' 등의 구분자를 사용해서 포맷을 조합할 수 있다.포맷 문자설명포맷 문자설명%Y년도 - 2025, 1999 %m월 - 01, 06, 12%y년도 - 25, 99 %c월 - 1, 6, 12 %d일 - 01, 21 %M월 - January, June, December %e일 - 1, 21 %b월 - Jan, Jun, Dec %T시간 - 13:11:45 %W요일 - Monday, Friday, Sunday %r시간 - 01:11:45 PM %a요일 - Mon, Fri, Sun %H24시간 시간 - 03, 13, 21 %i분 - 00,..
2025.05.21
-
[MYSQL] NULL 처리 (IFNULL, CASE, COALESCE)
MySQL에서 NULL을 처리하는 방법은 여러가지가 있다.✔ IFNULLIFNULL(Column, '대체 값')Column이 NULL인 경우 '대체 값'으로 치환 된다.✔ CASECASE WHEN 조건1 THEN 반환1 WHEN 조건2 THEN 반환2 ... ELSE 모든 조건에 부합되지 않는 경우 반환END조건에 맞는 경우 해당 반환값을 출력하지만 전부 해당되지 않는 경우 ELSE에 있는 값이 반환된다.✔ COALESCECOALESCE(Column1, Colunm2, ... , '대체 값')Column1 부터 확인해서 NULL이 아니면 바로 반환하게 된다. 마지막에 '대체 값'을 넣어서 모두 NULL인 경우를 대비한다. 💡 예시테이블명: PLAYERIDNAMETEAM1KIMFC ..
2025.05.20
-
[MYSQL][프로그래머스] 동명 동물 수 찾기
프로그래머스 > 코딩테스트 연습 > GROUP BY > 동명 동물 수 찾기https://school.programmers.co.kr/learn/courses/30/lessons/59041 📢 문제 설명ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.Column nameTypeNullableANIMAL_IDVARCHAR(N)FALSEANIMAL_TYPEVARCHAR(N)FALSED..
2025.05.20
-
[MYSQL][프로그래머스] 특정 형질을 가지는 대장균 찾기
프로그래머스 > 코딩테스트 연습 > SELECT > 특정 형질을 가지는 대장균 찾기 https://school.programmers.co.kr/learn/courses/30/lessons/301646 📢 문제 설명대장균들은 일정 주기로 분화하며, 분화를 시작한 개체를 부모 개체, 분화가 되어 나온 개체를 자식 개체라고 합니다. 다음은 실험실에서 배양한 대장균들의 정보를 담은 ECOLI_DATA 테이블입니다. ECOLI_DATA 테이블의 구조는 다음과 같으며, ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE 은 각각 대장균 개체의 ID, 부모 개체의 ID, 개체의 크기, 분화되어 나온 날짜, 개체의 형질을 나타냅니다.Column nameTyp..
2025.05.14
-
[MYSQL][프로그래머스] 자동차 대여 기록에서 장기/단기 대여 구분하기
프로그래머스 > 코딩테스트 연습 > String, Date > 자동차 대여 기록에서 장기/단기 대여 구분하기https://school.programmers.co.kr/learn/courses/30/lessons/151138 📢 문제 설명다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.Column nameTypeNullableHISTORY_IDINTEGERF..
2025.05.14
-
경쟁력 있는 주니어 개발자란?
나는 아직 입사한지 1년도 안된 아직 개발자라고 하기도 어색한 주니어 개발자이다.앞으로의 커리어와 개발자로서 마음가짐에 대해 생각이 많았는데 관련된 글을 발견했다.https://f-lab.kr/blog/to-be-competitive-junior-developers 경쟁력 있는 주니어 개발자가 되는 방법이공계 천대라는 이야기가 무색해진지 꽤 오랜 시간이 흘렀고, 개발자 지망생들도, 개발자가 된 사람들도 많아졌다.f-lab.kr 해당 글에선 경쟁력있는 주니어 개발자가 되기위해서 필요한 것들과, 어떤 개발자가 경쟁력 있는지, 또 그런 개발자가 되기 위해서 실천해야할 것들을 정리되어 있었다. 이 3가지를 중심으로 글을 정리해보았다.경쟁력 있는 주니어 개발자가 되기 위해선 특장점과 경험이 필요하다. 특장점먼저..
2025.04.22
-
[C#] ProcessStartInfo 클래스
ProcessStartInfo 클래스는 프로세스를 시작할 때 사용되는 정보를 포함하는 클래스입니다. 이 클래스는 프로세스의 이름, 인수, 작업 디렉토리, 우선순위 등 다양한 속성을 제공하여 프로세스를 시작하는 데 필요한 정보를 지정할 수 있다.ProcessStartInfo 클래스의 속성FileName: 시작할 프로세스의 이름을 지정합니다.Arguments: 프로세스에 전달할 인수를 지정합니다.WorkingDirectory: 프로세스의 작업 디렉토리를 지정합니다.PriorityClass: 프로세스의 우선순위를 지정합니다.WindowStyle: 프로세스의 창 스타일을 지정합니다.CreateNoWindow: 프로세스가 창을 생성하지 않도록 지정합니다.ProcessStartInfo 클래스의 사용 예시using ..
2025.04.10
-
[C#][프로그래머스] 게임 맵 최단거리
프로그래머스 > 코딩테스트 연습 > 깊이/너비 우선 탐색(DFS/BFS) > 게임 맵 최단거리 https://school.programmers.co.kr/learn/courses/30/lessons/1844 📒 문제ROR 게임은 두 팀으로 나누어서 진행하며, 상대 팀 진영을 먼저 파괴하면 이기는 게임입니다. 따라서, 각 팀은 상대 팀 진영에 최대한 빨리 도착하는 것이 유리합니다. 지금부터 당신은 한 팀의 팀원이 되어 게임을 진행하려고 합니다. 다음은 5 x 5 크기의 맵에, 당신의 캐릭터가 (행: 1, 열: 1) 위치에 있고, 상대 팀 진영은 (행: 5, 열: 5) 위치에 있는 경우의 예시입니다.위 그림에서 검은색 부분은 벽으로 막혀있어 갈 수 없는 길이며, 흰색 부분은 갈 수 있는 길입니다. 캐릭터가..
2025.02.19
-
[C#][프로그래머스] 무인도 여행
프로그래머스 > 코딩테스트 연습 > 연습문제 > 무인도 여행 https://school.programmers.co.kr/learn/courses/30/lessons/154540 📒 문제메리는 여름을 맞아 무인도로 여행을 가기 위해 지도를 보고 있습니다. 지도에는 바다와 무인도들에 대한 정보가 표시돼 있습니다. 지도는 1 x 1크기의 사각형들로 이루어진 직사각형 격자 형태이며, 격자의 각 칸에는 'X' 또는 1에서 9 사이의 자연수가 적혀있습니다. 지도의 'X'는 바다를 나타내며, 숫자는 무인도를 나타냅니다. 이때, 상, 하, 좌, 우로 연결되는 땅들은 하나의 무인도를 이룹니다. 지도의 각 칸에 적힌 숫자는 식량을 나타내는데, 상, 하, 좌, 우로 연결되는 칸에 적힌 숫자를 모두 합한 값은 해당 무인도..
2025.02.19
-
[C#][프로그래머스] 타겟 넘버
프로그래머스 > 코딩테스트 연습 > 깊이/너비 우선 탐색(DFS/BFS) > 타겟 넘버 https://school.programmers.co.kr/learn/courses/30/lessons/43165 📒 문제n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 re..
2025.02.18
-
[알고리즘] 너비 우선 탐색, BFS(Breadth-First Search) 코드 구현
너비 우선 탐색에 대한 개념은 아래 포스팅을 참조하면 된다. [알고리즘] 너비 우선 탐색 (BFS, Breadth-First Search)이번 포스팅은 그래프를 탐색하는 알고리즘 중 하나인 너비 우선 탐색(BFS)에 대해 알아보려고한다. [자료구조] 그래프 (Graph)그래프라고 하면 원 그래프나 막대 그래프, 혹은 수학의 y=f(x) 그twd0622.tistory.com 너비 우선 탐색은 Queue(큐)를 이용해서 코드로 구현할 수 있다. C# 코드를 통해 BFS를 구현해 보겠다.큐(Queue)를 이용한 반복 구현너비 우선 탐색은 Queue를 이용해서 구현할 수 있으며, 한 정점을 방문하면 인접한 정점을 모두 Queue에 담고 Queue에 담긴 정점을 꺼내 Queue에 담긴 모든 노드를 방문할 때 ..
2025.02.17
-
[알고리즘] 깊이 우선 탐색, DFS(Deep-First Search) 코드 구현
깊이 우선 탐색에 대한 개념은 아래의 포스팅을 참조하면 된다. [알고리즘] 깊이 우선 탐색 (DFS, Depth-First Search)이번 포스팅은 그래프를 탐색하는 알고리즘 중 하나인 깊이 우선 탐색(DFS)에 대해 알아보려고 한다. [자료구조] 그래프 (Graph)그래프라고 하면 원 그래프나 막대 그래프, 혹은 수학의 y=f(x) 그래twd0622.tistory.com 깊이 우선 탐색을 코드로 구현하는 방법은 2가지로 반복 구현, 재귀 구현이 있다. C#코드를 통해 DFS를 구현해 보겠다.반복구현반복 구현은 Stack을 이용한 구현 방법으로, 한 정점을 방문하면 인접한 정점들을 모두 Stack에 담고 Stack에서 하나씩 꺼내 인접한 노드를 Stack에 담으면서 Stack에 담긴 모든 노드를 방문..
2025.02.17
-
[디자인패턴] 디자인 패턴 개요
디자인 패턴(Design Pattern)은 소프트웨어 설계 과정에서 발생하는 문제들에 대한 해결책이다. 코드에서 반복되는 디자인 문제들을 해결하기 위해 맞춤화할 수 있는 미리 만들어진 청사진과 비슷하다. 일종의 설계 기법이며, 설계 방법이다목적sw 재사용성, 호환성, 유지보수성을 보장 특징디자인 패턴은 하나의 아이디어로, 특정한 구현이 아니다. 패턴과 알고리즘과 자주 혼동하는데, 두 개념 모두 어떤 문제에 대한 해결책을 설명하기 때문이다. 알고리즘은 어떤 문제를 해결하기 위해 따라야 할 명확한 절차이고, 디자인 패턴은 해결책에 대한 상위 수준의 설명이다. 디자인 패턴은 결과와 기능을 제시하나 구현 단계 및 순서는 사용자가 결정한다. 프로젝트에 항상 적용해야 하는 것은 아니지만, 재사용, 호환, 유지 보..
2025.02.13