풀스택 개발 159 정책(Policy)과 클레임(Claim) 1. 정책과 클레임이란? 클레임(Claim) 클레임은 사용자에 대한 정보를 담고 있는 조각이자 객체입니다. 예를 들어, 사용자의 이름, 이메일, 역할(role) 등이 클레임으로 표현될 수 있습니다. 클레임은 주로 JWT(Json Web Token) 또는 쿠키와 같은 인증 토큰에 포함됩니다. 정책(Policy) 정책은 특정 액션을 수행할 수 있... 2024.09.08 풀스택 개발, ASPNET LINQ (Language Integrated Query) LINQ(Language Integrated Query)는 C#과 .NET에서 데이터 소스를 쿼리할 수 있게 해주는 통합된 쿼리 문법입니다. SQL과 유사한 문법을 사용해 데이터베이스뿐만 아니라 컬렉션, XML, 데이터셋 등 다양한 데이터 소스를 일관된 방식으로 쿼리할 수 있습니다. LINQ는 기본적으로 IEnumerable<T> 또는 ... 2024.09.03 풀스택 개발, CSharp yield 키워드 yield라는 단어를 찾아보면 “산출/생산하다”, “양도하다” 등의 뜻을 가지고 있습니다. ‘yield’: 네이버 영어사전 프로그래밍에서 yield 키워드가 사용되는 방식은 이 단어의 “생산하다” 또는 “산출하다”는 의미와 가장 관련이 깊습니다. 이 키워드를 사용할 때, 메서드는 값을 “산출”하거나 “생산”하여 호출자에게 반환합니다. C... 2024.08.25 풀스택 개발, CSharp AutoMapper / 2. 다양한 사용 방법 AutoMapper는 단순히 DTO와 모델 간의 값 이동만을 하기 위해 사용하는것이 아닙니다. 기본적으로 DTO와 모델 간의 변환을 간편하게 해주지만, 매핑을 위해 조건을 건다거나, 원하는 형태로 변환해서 매핑을 하는 등, 다양한 기능을 지원해줍니다. 조건부 매핑 조건부 매핑은 매핑 작업을 수행할 때 특정 조건이 충족될 때만 매핑을 수행하도록 하... 2024.08.15 풀스택 개발, ASPNET AutoMapper / 1. AutoMapper와 초기화 ORM (Object-Relational Mapping) 라이브러리와 AutoMapper는 서로 다른 목적과 기능을 가진 도구들입니다. 먼저 이들의 차이점을 간단히 설명한 후, AutoMapper에 대해 자세히 알아보겠습니다. ORM과 AutoMapper ORM (Object-Relational Mapping) 라이브러리 ORM은 데이터베이스와... 2024.08.11 풀스택 개발, ASPNET ORM 라이브러리 ORM이란? ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어를 사용하여 관계형 데이터베이스의 데이터를 객체에 매핑하는 기술입니다. ORM을 사용하면 SQL 쿼리를 작성하지 않고도 데이터베이스와 상호작용할 수 있어 개발자는 객체 지향 프로그래밍에 집중할 수 있습니다. 이는 데이터베이스 설계와 비즈니스 로직 사이의 ... 2024.08.05 풀스택 개발, ASPNET SQL문을 비동기적으로 실행 Command 객체에는 Connection 객체에서 비동기적으로 데이터베이스에 연결하는 OpenAsync()처럼 SQL문도 비동기적으로 실행할 수 있는 함수들이 준비되어 있습니다. 이런 비동기 메서드들을 사용하면 애플리케이션의 응답성을 유지하면서 데이터베이스 작업을 수행할 수 있습니다. 예를 들어, ExecuteScalarAsync()는 비동기적으... 2024.07.27 풀스택 개발, ASPNET SQLParameter 클래스와 파라미터 ASP.NET과 ADO.NET에서 SQL의 파라미터는 SQL 쿼리에서 값들을 안전하고 효율적으로 다루기 위한중요한 개념입니다. 일반적으로 문자열을 연결하여 SQL문을 작성하는 것은 SQL Injection (SQL문을 해킹) 등의 문제를 발생시킬 수 있으므로, 파라미터가 있는 경우 SqlParameter를 사용하는 것이 권장됩니다. SqlParam... 2024.07.25 풀스택 개발, ASPNET C# Task와 Task<T> C#의 Task는 비동기 프로그래밍의 기본 단위로, 작업 단위를 표현하고 관리하는데 사용됩니다. Task와 Task<T> Task: 반환 값이 없는 비동기 작업을 나타냅니다. Task<T>: 반환 값이 있는 비동기 작업을 나타냅니다. 여기서 T는 반환 값의 타입을 나타냅니다. Task의 생성과 사용 1. Task... 2024.07.24 풀스택 개발, CSharp async와 await async와 await 키워드는 비동기 프로그래밍을 쉽게 할 수 있게 도와주는 도구입니다. 이 두 키워드는 .NET Framework 4.5에서 도입되었으며, 주로 I/O 바운드 작업 (예: 파일 읽기/쓰기, 네트워크 요청)이나 긴 시간이 걸리는 작업 등을 수행할 때 유용합니다. 동기화(Synchronization)의 의미 동기화는 멀티스레딩 환... 2024.07.23 풀스택 개발, CSharp Connection 객체의 Open()과 OpenAsync() SqlConnection 클래스는 데이터베이스 연결을 여는 메서드로 Open()과 OpenAsync()를 제공합니다. 이 두 메서드는 데이터베이스 연결을 여는 기능을 수행하지만, 동기와 비동기 방식으로 동작하는 차이가 있습니다. Open() public override void Open(); 동기적 메서드: Open() 메서드는 동기적으... 2024.07.21 풀스택 개발, ASPNET ADO.NET과 구성 요소 ADO.NET은 Microsoft의 .NET Framework에서 데이터와 데이터 서비스에 접근할 수 있는 데이터 액세스 서비스를 제공하는 구성 요소 집합(클래스 라이브러리)입니다. 일반적으로 프로그래머들이 관계형 데이터베이스 시스템에 저장되어 있는 데이터에 접근하거나 수정할 때 사용합니다. (물론, 비관계형 데이터에 접근할 때도 사용할 수 있습니다... 2024.07.19 풀스택 개발, ASPNET ASP.NET의 Redirect Redirect는 사용자를 현재 페이지에서 다른 페이지로 이동시키는 방법을 말합니다. ASP.NET에서는 다양한 방법으로 Redirect를 수행할 수 있으며, 대표적인 방법은 return Redirect(), Response.Redirect, Server.Transfer, Server.Execute 등이 있습니다. return Redirect() ... 2024.07.18 풀스택 개발, ASPNET form과 Controller HTML <form> 요소는 사용자가 웹 애플리케이션과 상호작용할 수 있도록 하는 입력 요소를 포함하는 컨테이너입니다. 주로 사용자로부터 데이터를 수집하여 서버로 전송하기 위해 사용됩니다. action 폼 데이터를 제출할 URL을 지정합니다. ASP.NET 컨트롤러는 이 URL에 맞는 액션 메서드에서 폼 데이터를 수신하고 처리하게 됩... 2024.07.16 풀스택 개발, ASPNET ASP.NET의 Razor View ASP.NET의 Razor View는 HTML과 C# 코드를 결합하여 동적인 웹 페이지를 생성하는 데 사용됩니다. Razor는 ASP.NET MVC 및 ASP.NET Core에서 사용하는 뷰 엔진으로, Razor 구문은 간단하면서도 강력하며, HTML 태그와 C# 코드를 혼합하여 사용할 수 있도록 설계되었습니다. 1. 한 줄 표현식 (Single ... 2024.07.16 풀스택 개발, ASPNET Master Page와 Layout ASP.NET의 Master Page와 Layout은 웹 애플리케이션 개발에서 일관된 레이아웃과 디자인을 유지하는 데 사용되는 기능입니다. 두 개념 모두 템플릿 기반의 페이지 디자인을 가능하게 하여, 여러 페이지에 걸쳐 공통된 레이아웃을 쉽게 적용할 수 있습니다. Shared 폴더 Shared 폴더는 여러 뷰(View)와 레이아웃(Layout) ... 2024.07.11 풀스택 개발, ASPNET View로 데이터를 전달하는 방법(ViewData, ViewBag, ViewModel) ASP.NET에서 Controller에서 View로 데이터를 전달하는 방법은 여러 가지가 있습니다. 대표적으로 ViewData, ViewBag, ViewModel을 사용하여 데이터를 전달할 수 있습니다. ViewData ViewData는 Controller와 View 간에 키-값 쌍으로 데이터를 저장하고 전달하는 데 사용됩니다. ViewData... 2024.07.10 풀스택 개발, ASPNET Action과 ViewResult, Controller명 폴더와 Action 이름 ViewResult ViewResult 는 IActionResult 를 상속 받은, 특정 뷰를 렌더링하고 이를 클라이언트에 반환하는 역할을 하는 ActionResult의 한 유형입니다. 일반적으로 컨트롤러의 액션 메소드에서 return View()를 호출하면 ViewResult 객체가 반환됩니다. public ViewResult MyAction(... 2024.07.08 풀스택 개발, ASPNET Query String과 Action, 모델 바인딩 Query String Query String은 URL의 일부분으로 클라이언트와 서버 간에 데이터를 전달하는 매우 간단한 방법(문자열)입니다. http://example.com/page?name=John&age=30 Query String은 URL의 끝에 추가되며 ? 문자로 시작하고, key=value 형태의 쌍으로 구성됩니다. 또한, ... 2024.07.07 풀스택 개발, ASPNET Controller와 Action, 그리고 라우팅 Controller Controller는 사용자 입력을 처리하고 모델을 업데이트하거나 뷰를 반환하는 역할을 합니다. ASP.NET MVC에서 컨트롤러는 일반적으로 “Controllers” 폴더 아래에 위치하며, System.Web.Mvc.Controller 클래스를 상속하여 구현한 클래스입니다. 일반적으로 “Controller”로 끝나는 이름을 ... 2024.07.06 풀스택 개발, ASPNET ASP.NET의 MVC 패턴 ASP.NET의 MVC 패턴은 소프트웨어 개발에서 사용되는 디자인 패턴 중 하나로, 애플리케이션을 세 가지 주요 구성 요소로 분리하여 개발 및 유지 보수를 용이하게 하는 구조입니다. MVC는 “Model-View-Controller”의 약자로 각각 “데이터-UI-제어”를 담당한다고 볼 수 있겠습니다. 1. Model (모델) 어떤 객체나 데이... 2024.07.03 풀스택 개발, ASPNET javascript의 async와 await async와 await의 사용은 자바스크립트의 비동기 프로그래밍 패턴을 단순화하고, 코드의 가독성을 크게 향상시킬 수 있는 키워드입니다. async async 키워드는 함수 앞에 붙여서 해당 함수를 비동기 함수로 변환합니다. 이렇게 선언된 비동기 함수는 항상 Promise를 반환합니다. 이 함수 내에서 명시적으로 값을 반환할 경우 Promise... 2024.06.30 풀스택 개발, javascript javascript의 Promise 객체와 Promise 체이닝 Promise 객체는 어떤 함수를 처리하며 처리 상태와 처리 결과를 가지고 있는 객체입니다. 이 함수를 executor(실행자, 실행 함수) 라고 하며, 주로 비동기 함수의 처리 상태와 결과를 다루어서 비동기 코드를 더 쉽게 작성하기 위해 사용합니다. 또한, 이 객체를 통해 콜백 지옥(Callback Hell)이라고 불리는 복잡한 중첩 구조도 피할... 2024.06.29 풀스택 개발, javascript JavaScript 배열 정렬 메서드(sort, toSorted) 메서드 사용 범위 설명 sort 배열 배열의 요소를 정렬하는 메서드 toSorted 배열 원본 배열을 변경하지 않고 새로운 정렬된 배열을 반환하는 메서드 sort 메서드 so... 2024.06.28 풀스택 개발, javascript JavaScript 배열 순회 및 조작 메서드(forEach, map, filter, join) 메서드 사용 범위 설명 forEach 배열 배열의 각 요소에 대해 함수를 실행하는 메서드 map 배열 배열의 각 요소를 변환하여 새로운 배열을 생성하는 메서드 fil... 2024.06.28 풀스택 개발, javascript JavaScript 배열 탐색 및 검사 메서드(includes,indexOf,findIndex,find) 메서드 사용 범위 설명 includes 배열과 문자열 배열과 문자열 내에 특정 요소가 포함되어 있는지 확인하는 메서드 indexOf 배열과 문자열 배열과 문자열 내에서 특정 요소의 첫 번째 인덱... 2024.06.28 풀스택 개발, javascript 스프레드(Spread)와 레스트(Rest) 매개변수 JavaScript의 Spread 연산자와 Rest 매개변수는 ES6(ECMAScript 2015)에서 도입된 문법으로, 둘 다 세 개의 점(...)으로 표기되지만, 용도와 동작 방식이 다릅니다. Spread 연산자 Spread 연산자(...)는 배열이나 문자열과 같이 반복 가능한(iterable) 객체를 각각의 요소로 분해하여 각 요소를 개별적으... 2024.06.28 풀스택 개발, javascript 원시 타입(Primitive)과 객체 타입(Object) 자바스크립트는 데이터 타입을 크게 원시 타입(Primitive Types) 과 객체 타입(Object Types) 으로 나눌 수 있습니다. 원시 타입은 변경 불가능한 값으로 단순한 데이터를 표현하며, 객체 타입은 변경 가능한 복합 데이터 구조를 나타냅니다. 원시 타입(Primitive Types) 원시 타입은 기본 자료형 타입이며, 변경 불가능한... 2024.06.27 풀스택 개발, javascript 구조 분해 할당 (Destructuring Assignment) 구조 분해 할당(Destructuring Assignment)은 배열이나 객체의 속성을 분해하여 개별 변수에 할당할 수 있게 하는 기능입니다. 이 기능은 한 곳에서 변수들을 선언하고 할당 받을 수 있어서 코드의 가독성을 높이는 데 유용합니다. 배열 구조 분해 할당 배열 구조 분해 할당을 사용하면 배열의 요소를 개별 변수에 할당할 수 있습니다. ... 2024.06.27 풀스택 개발, javascript javascript의 객체(Object) JavaScript의 객체(Object)는 다양한 데이터를 하나의 단위로 묶어 관리하는 복합 데이터 타입입니다. 객체는 속성(properties) 과 메서드(methods) 를 포함할 수 있으며, 이 두 요소를 통해 데이터를 표현하고 조작합니다. JavaScript는 객체 지향 프로그래밍(OOP) 언어의 특성을 지니고 있으며, 객체를 중심으로 프로... 2024.06.26 풀스택 개발, javascript 화살표 함수 (Arrow Function), 람다 (Lambda) 화살표 함수(Arrow Function) 란, ES6에서 도입된, 익명 함수를 간결한 문법으로 정의할 수 있는 기능을 말합니다. 저는 이를 람다 표현식이라고 부르기도 합니다. 문법 (매개_변수) => { 함수_몸체 } 함수 몸체는 한 줄로 작성할 수 있는 경우, 중괄호와 return 키워드를 생략할 수 있습니다. (param1, par... 2024.06.26 풀스택 개발, javascript 함수 표현식 (Function Expression) 자바스크립트(JavaScript)에서 함수 표현식(Function Expression)은 함수를 정의하고 할당할 수 있는 하나의 방법입니다. 함수 표현식은 일반적으로 함수를 변수에 할당하여 사용하는 방법을 말합니다. 함수 선언(Function Declaration)과는 다르게, 함수 표현식은 정의되기 전에 호출할 수 없습니다. 이는 자바스크립트의 ... 2024.06.26 풀스택 개발, javascript 호이스팅 (Hoisting) 호이스팅(Hoisting)은 변수와 함수의 선언이 해당 스코프의 최상단으로 끌어올려지는 행동을 말합니다. 호이스팅은 코드가 실제로 실행되는 순서와 다르게 동작할 수 있기 때문에 혼란을 줄 수 있습니다. 변수 호이스팅 JavaScript에서 변수는 var, let, const로 선언할 수 있습니다. 이 중 var로 선언된 변수는 호이스팅의 영향을... 2024.06.26 풀스택 개발, javascript 중첩 함수 (Nested Function)와 클로저 (closure) 중첩 함수(Nested Function)는 JavaScript에서 다른 함수 내부에 정의된 함수를 말합니다. 중첩 함수는 그 함수가 정의된 범위에서만 접근할 수 있으며, 이를 통해 특정 기능을 캡슐화하거나 정보를 숨길 수 있습니다. function outerFunction(outerVariable) { // 외부 함수의 변수 (매개 변수) ... 2024.06.26 풀스택 개발, javascript javascript 연산자 JavaScript 연산자 표 연산자 설명 예제 (간단) + 덧셈 5 + 2 (결과: 7) - 뺄셈 5 - 2 (결과: 3) * 곱셈 5 * ... 2024.06.26 풀스택 개발, javascript 템플릿 리터럴 (Template Literals) 템플릿 리터럴(Template Literals)은 ES6(ECMAScript 2015)에서 도입된 문법으로, 문자열을 작성할 때 기존의 따옴표 대신 백틱(`)을 사용하여 보다 가독성이 좋고 유연하게 문자열을 다룰 수 있는 기능입니다. 템플릿 리터럴은 변수와 표현식을 포함할 수 있으며, 여러 줄 문자열을 쉽게 작성할 수 있습니다. 기본 문법 ... 2024.06.26 풀스택 개발, javascript 확장 메서드 (Extension Method) 확장 메서드는 이미 정의된 클래스에 새로운 메서드를 추가할 수 있게 해주는 기능입니다. 이 기능은 기존 클래스의 내부 코드를 수정하지 않고 마치 새로운 인스턴스 메서드를 정의하는 것처럼 추가할 수 있습니다. 일반적으로 기존 클래스의 메서드를 확장하는 방법으로는 상속이 있는데, sealed로 봉인된 클래스는 상속 받을 수 없고, 새로운 기능으로 확장... 2024.06.25 풀스택 개발, CSharp Attribute(어트리뷰트)와 AttributeTargets 어트리뷰트(Attribute)는 코드 요소에 대한 메타데이터를 추가하는 방법입니다. 어트리뷰트는 클래스, 메서드, 프로퍼티, 필드, 이벤트 등 다양한 코드 요소에 적용될 수 있으며, 주로 런타임 시 또는 컴파일 타임에 특정 동작을 변경하거나 추가 정보를 제공하기 위해 사용됩니다. 이 추가 정보는 런타임에 리플렉션을 통해 접근할 수 있습니다. 어트... 2024.06.24 풀스택 개발, CSharp 리플렉션 (Reflection) 리플렉션(Reflection)이라는 용어는 “반사”, “(거울에 반사되어 비친) 상”, “반영”, “묘사(설명)” 등의 뜻이 있습니다. 프로그래밍에서 리플렉션은 프로그램이 런타임에 자신을 반사 혹은 묘사하여 자신의 구조와 동작에 대한 정보를 얻고, 이를 바탕으로 동적으로 동작을 변경할 수 있는 기능을 의미합니다. 즉, 리플렉션(Reflection)... 2024.06.24 풀스택 개발, CSharp C#의 Predicate Predicate 델리게이트는 Func<>나 Action<>과 같은 미리 정의된 델리게이트 형식입니다. Predicate<T> 델리게이트는 특정 조건에 맞는지를 검사하는 메서드를 캡슐화하는 데 사용되는 델리게이트로, 하나의 매개변수를 갖고 리턴 값이 bool인 델리게이트입니다. public delegate bool ... 2024.06.23 풀스택 개발, CSharp C#의 람다(Lambda)와 캡처(Capture), 클로저(closure) 람다(lambda)는 일반적으로 익명 함수(anonymous function) 혹은 이름이 없는 작은 함수로, 다른 함수 내에서 인라인으로 정의되거나, 간단한 표현식을 실행하기 위해 사용됩니다. 일반적인 람다 함수의 특징 익명성: 람다 함수는 굳이 이름을 붙이지 않고, 즉석에서 정의하고 사용할 수 있습니다. 간결함: 람다 함수는 간단한 표... 2024.06.23 풀스택 개발, CSharp [delegate] 03. 익명 델리게이트와 Func, Action 익명 델리게이트(Anonymous Delegate) 델리게이트에 메서드 참조를 저장하기 위해 함수의 식별자(이름)을 제공하지만, 가끔씩은 특정 함수 내에서만 사용되어 함수를 따로 만들어 둘 필요가 없을 때도 있습니다. (이름이 필요 없는 일회용 함수를 사용하고 싶을 때) 이럴 때, 이름이 명시되지 않은 델리게이트인 익명 델리게이트를 사용할 수 있습... 2024.06.22 풀스택 개발, CSharp [delegate] 02. event와 EventArgs (EventHandler) event는 delegate의 사용 패턴을 좀 더 일반화 해서 제공하는 예약어입니다. 예를 들어, 콜백 패턴 혹은 이벤트 패턴이나 옵저버 패턴 등을 구현할 때, 구현하기 쉽도록 다양한 기능을 제공합니다. 제약 조건과 제공 기능 event는 다음과 같은 제약 조건과 기능을 제공합니다. 캡슐화 이벤트를 통해 구독자와 발생자... 2024.06.21 풀스택 개발, CSharp [delegate] 01.델리게이트의 정의와 정체, 체이닝, 사용 목적 델리게이트(Delegate)는 C#에서 중요한 개념 중 하나로, 메서드 참조를 저장하고 호출할 수 있는 형식을 제공하는 기능입니다. C++의 함수 포인터와 비슷한 개념인데, 좀 더 많은 기능을 제공합니다. 델리게이트를 사용하면 메서드를 매개변수로 전달하거나, 런타임에 호출할 메서드를 동적으로 결정할 수 있습니다. 델리게이트 사용 델리게이트는 d... 2024.06.20 풀스택 개발, CSharp 인터페이스(Interface)와 추상 클래스(Abstract Class) 인터페이스(Interface) 인터페이스는 객체 지향 프로그래밍에서 중요한 개념으로, 메서드 시그니처만을 정의하고, 구현은 제공하지 않는 일종의 청사진입니다. 인터페이스는 주로 다형성을 구현하고, 클래스 간의 결합도를 낮추는데 목적이 있습니다. 그로 인해 서로 다른 클래스들이 동일한 인터페이스를 구현함으로써 상호 작용 할 수 있게 합니다. 즉, ... 2024.06.19 풀스택 개발, CSharp C#의 String과 StringBuilder C#에서 string과 StringBuilder는 문자열을 처리하기 위한 두 가지 주요 클래스입니다. string 클래스는 불변(immutable) 객체이고, StringBuilder 클래스는 가변(mutable) 객체입니다. string 클래스 string 객체는 한 번 만들면 변경할 수 없습니다. 이것을 불변(immutable) 객체라고 합니... 2024.06.18 풀스택 개발, CSharp C# 제네릭 컬렉션과 비제네릭 컬렉션 정리 제네릭 컬렉션 컬렉션 이름 설명 버전 List<T> 요소를 순서대로 저장하는 동적 배열 .NET 2.0 LinkedList<T> 각 요소가 컬렉션 내의 다음 요소와 이전 요소를 가리... 2024.06.17 풀스택 개발, CSharp C# Generics(제네릭)과 제약 조건 C# 제네릭(Generic)은 타입 안전성과 코드 재사용성을 극대화하기 위해 도입된 기능입니다. 제네릭을 알아보기 전, 기존 C# 1.0에서는 기본 형식(Primitive types)으로 컬렉션 객체를 사용했습니다. 예를 들어, ArrayList의 경우에는 모든 타입의 컬렉션을 받을 수 있도록 object타입을 사용합니다. 따라서, 모든 기본 타... 2024.06.16 풀스택 개발, CSharp C++ STL 컨테이너 정리 컨테이너 이름 설명 버전 array 고정 크기 배열, 크기가 컴파일 시에 결정됨 C++11 vector 동적 배열, 인덱스 접근 가능 list 양방향 ... 2024.06.15 풀스택 개발, C++ C#의 virtual과 override, 그리고 sealed C#의 virtual과 override 키워드는 상속과 다형성(polymorphism)을 구현하는데 핵심적인 역할을 합니다. 이 두 키워드를 사용하면 기본 클래스의 메서드를 파생 클래스에서 재정의할 수 있으며, 이를 통해 코드의 유연성과 재사용성을 높일 수 있습니다. 다형성(Polymorphism) 다형성은 같은 인터페이스를 통해 서로 다른 데이... 2024.06.10 풀스택 개발, CSharp Nullable과 null 병합 연산자, null 조건 연산자 null이란, “값이 없는” 혹은 “어떤 객체도 참조하지 않은” 참조형 변수를 말합니다. C#에서 null을 가질 수 있는 타입은 참조 타입입니다. 값 타입은 null일 수 없습니다. 다시 말해, C#에서 null은 “어떤 객체도 참조하지 않은 참조형 변수의 디폴트 값”이라고 할 수 있습니다. 값 형식에서의 디폴트 값(초기화 하지 않을 때 가지는... 2024.06.08 풀스택 개발, CSharp as, is - 타입 변환과 타입 확인 키워드 C#에서 as와 is 연산자는 객체의 타입을 안전하게 처리하기 위해 중요한 역할을 합니다. 이러한 연산자들은 형 변환과 타입 확인 과정을 간소화하여 코드의 안정성과 가독성을 향상시키는 데 도움을 줍니다. is 키워드 is 키워드는 객체가 특정 타입인지 확인하는 데 사용됩니다. 이 연산자는 객체의 타입이 지정된 타입과 호환되는지 검사하고, 그 결... 2024.06.06 풀스택 개발, CSharp C#의 Static과 this 키워드 C#에서 static 키워드는 특정 클래스, 메서드, 필드, 속성, 생성자, 또는 다른 멤버가 클래스 수준에서 정의되도록 하기 위해 사용됩니다. 즉, static 멤버가 클래스의 특정 인스턴스에 속하지 않으며, 클래스 자체에 속하게 하여 인스턴스 없이 사용 가능하도록 합니다. Static Class (정적 클래스) Static Class는 클래스... 2024.06.04 풀스택 개발, CSharp C#의 접근 제한자와 어셈블리(Assembly) 접근 지정자 설명 public 모든 코드에서 접근 가능 protected 동일 클래스 및 파생 클래스에서 접근 가능 private 동일 클래스 내에서만 접근 가능 ... 2024.06.03 풀스택 개발, CSharp 클래스(Class), 프로퍼티와 백킹 필드(backing field), base와 this 클래스(class)는 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 개념 중 하나로, 데이터와 해당 데이터를 처리하는 메서드(기능)를 하나로 묶는 방법입니다. 클래스는 데이터(필드)와 해당 데이터에 작용하는 메서드(함수)의 집합을 정의합니다. C#은 객체 지향 프로그래밍 패러다임을 강력하게 따르는 프로그래... 2024.06.02 풀스택 개발, CSharp object 타입과 var 키워드와의 비교 C#은 강력한 정적 타입 언어로, 변수의 타입을 엄격하게 정의합니다. 그러나 코드의 유연성과 간결성을 높이기 위해 object와 var 키워드를 제공합니다. 이 두 키워드는 얼핏 보면 다양한 타입을 추상적으로 사용한다는 점에서 비슷해 보일 수 있으나, 실제로는 서로 다른 목적과 사용 방법을 가지고 있습니다. object 키워드 object는 C#... 2024.06.01 풀스택 개발, CSharp C#의 박싱과 언박싱(Boxing and Unboxing) Boxing과 Unboxing이란? Boxing과 Unboxing은 C#에서 값 타입(Value Type)과 참조 타입(Reference Type) 간의 변환에 대한 개념입니다. 이 변환은 유연성과 타입 안정성을 제공하면서도 성능에 영향을 미칠 수 있습니다 간략하게, 박싱(Boxing) 이란, 값 타입(Value Type)을 참조 타입(Refer... 2024.05.30 풀스택 개발, CSharp C#의 값 타입과 참조 타입 값 타입 (Value Types) 값 타입은 데이터를 직접 저장합니다. 일반적으로 이는 스택(Stack) 메모리 영역에 저장되며, 주로 크기가 작고 수명이 짧은 데이터에 적합합니다. 다만, 값 타입이 참조 타입의 필드로 사용될 때는 해당 객체와 함께 힙 메모리에 저장될 수도 있습니다. 기본 데이터 타입: int, float, double, ... 2024.05.29 풀스택 개발, CSharp C#에서의 Call By Value와 Call By Reference C# 프로그래밍 언어에서는 메서드 호출 시 인자를 전달하는 두 가지 주요 방식인 Call By Value와 Call By Reference가 있습니다. 이 두 가지 방식은 메서드를 호출할 때, 값을 복사해서 전달하느냐, 원본 데이터를 넘기느냐로 나뉠 수 있습니다. Call By Value Call By Value 방식은 인자가 메서드에 값으로 전... 2024.05.28 풀스택 개발, CSharp C#의 형식 지정자 C#의 형식 지정자는 문자열 형식 지정 시 형식화된 출력 결과를 만들기 위해 사용됩니다. 형식 지정자는 주로 string.Format 메서드, 보간 문자열 (interpolated strings), Console.WriteLine, ToString 메서드 등에서 사용됩니다. 기본 형식 지정자 숫자 형식 지정자 형식 지... 2024.05.26 풀스택 개발, CSharp C#에서의 구조체(struct) 구조체(Struct)란, 연관된 여러 데이터를 하나의 단위로 묶어 처리하기 위해 사용되는 구조화 된 데이터입니다. C#에서의 구조체는 값 타입(value type)이며, 기본적으로 데이터 그룹을 관리하기 위해 사용됩니다. 구조체 정의 및 선언 구조체는 struct 키워드를 사용하여 정의합니다. 이때, 각 멤버의 기본 접근 지정자는 interna... 2024.05.25 풀스택 개발, CSharp C#에서 숫자와 문자열 변환 문자열을 숫자로 변환 Parse()와 TryParse() 사용 문자열을 숫자 타입으로 변환하는 방법 중 하나는 해당 자료형에 존재하는 변환 메서드(Parse(), TryParse())를 사용하는 방법입니다. Parse() 다음 예는 정수형 문자를 Parse()를 사용해서 int로 바꾸는 예제입니다. 만약, 변환이 실패하면 예외를 던집니다. ... 2024.05.24 풀스택 개발, CSharp var - 정적 타이핑 타입 추론 키워드 var란 C#의 var 키워드는 정적 타이핑(Static Typing) 타입 추론(Type Inference) 키워드입니다. 정적 타이핑이란, 컴파일 시점에 변수의 타입이 정해지는 방식을 의미합니다. C#은 정적 타이핑 언어로, 모든 변수는 컴파일 시점에 명확한 타입을 가집니다. var 키워드는 컴파일러가 변수의 타입을 초기화 식을 통해 ... 2024.05.22 풀스택 개발, CSharp 선택적 매개변수(Optional Parameter) C#에서 선택적 매개변수(optional parameter)는 메서드, 생성자, 인덱서, 대리자 등에서 특정 매개변수에 기본값을 제공하여 호출자가 해당 매개변수를 생략할 수 있게 하는 기능입니다. 이 기능은 코드의 유연성을 증가시키고, 메서드 오버로드를 줄여 코드의 간결성과 가독성을 향상시킵니다. 선언 방법 기본값 지정 선택적 매개변수를 사용하... 2024.05.21 풀스택 개발, CSharp C#의 out 키워드 간단 정리 C#의 out 키워드는 메서드에서 사용되는 매개변수 키워드 중 하나로, 메서드가 호출될 때 해당 매개변수가 초기화되지 않아도 되고, 메서드 내부에서 해당 매개변수에 값을 할당한 후 호출한 곳에서 그 값을 사용할 수 있게 합니다. 주로 메서드가 여러 값을 반환해야 하는 경우 사용됩니다. 특징 초기화 필요 없음 out 매개변... 2024.05.20 풀스택 개발, CSharp C#의 ref 키워드 간단 정리 C#의 ref 키워드는 메서드에 매개변수를 참조(Reference)로 전달 할 때 사용됩니다. 이는 값이 아닌 변수의 참조를 전달하여 메서드 내에서 해당 변수의 값을 직접 변경할 수 있게 합니다. ref 키워드를 사용하면 메서드가 호출되는 동안 원본 변수의 값이 변경될 수 있습니다. 이는 일반적인 값 전달(Value) 방식과 구별됩니다. ref ... 2024.05.20 풀스택 개발, CSharp 열거형 (Enum) - 의미있는 상수 C#의 열거형(enum)은 관련된 이름 있는 상수들을 하나의 묶음으로 관리하기 위해 사용되는 특별한 값 형식입니다. 열거형을 사용하면 코드의 가독성을 높이고, 특정 값들이 가지는 의미를 명확하게 전달할 수 있습니다. 열거형의 정의 및 특징 열거형 정의: 열거형은 여러 상수 값을 묶어 하나의 타입으로 정의하는 것을 의미합니다. 열거형의 각 상... 2024.05.18 풀스택 개발, CSharp C#의 연산자와 연산자 우선순위 C#에는 다양한 연산자가 존재합니다. 그 중 대표적으로는, 산술 연산자, 비교 연산자, 논리 연산자, 비트 연산자, 대입 연산자 등이 있습니다. 산술 연산자 (Arithmetic Operators) 연산자 설명 + 덧셈 - ... 2024.05.17 풀스택 개발, CSharp C#의 자료형과 'decimal' 자료형과 크기 먼저, C++을 공부하고 오신 분이라면 자료형의 크기가 운영체제별로 달라질 수 있는지 궁금해하실 수 있습니다. C#에서는 기본 자료형 크기가 운영체제에 상관없이 일관되게 정해져 있습니다. 이는 C#이 .NET 기반에서 JIT 컴파일 혹은 런타임 환경에서 동작하며, 이로 인해 자료형 크기가 표준화되어 있기 때문입니다. C#의 JIT... 2024.05.15 풀스택 개발, CSharp auto와 decltype - 타입 추론 auto C++11에서 도입된 auto키워드는 타입 추론(Type Inference) 키워드로, 변수의 타입을 자동으로 유추하는 기능을 제공합니다. 이는 코드의 간결성을 높이고 프로그래머에게 타입 선언에서의 편의성을 제공합니다. 사용법 1. 기본 자료형 타입으로 사용 auto 키워드를 사용하면 컴파일러가 변수의 타입을 해당 변수의 초기화 값으... 2024.02.14 풀스택 개발, C++ C++의 StringStream C++의 #include <sstream> 헤더는 메모리에 있는 문자열을 사용하여 데이터를 다른 타입으로 파싱하거나, 데이터를 문자열로 변환하는 기능을 제공하는 String Stream 클래스들을 포함하고 있습니다. IStringStream istringstream 클래스는 문자열을 입력 스트림으로 사용할 수 있게 합니다. 이 클래스를... 2024.02.11 풀스택 개발, C++ enum과 enum class (열거형) Enum (열거형) 열거형(Enum)은 C++에서 상수를 정의하는 방법 중 하나로, 관련된 이름 있는 상수들을 하나의 묶음으로 관리하기 위해 사용됩니다. 이러한 열거형을 사용하면 코드의 가독성을 높이고, 특정 값들에 의미를 부여할 수 있습니다. 일반적으로 열거형의 각 상수는 고유한 이름과 값을 가집니다. enum Color { RED =... 2024.02.09 풀스택 개발, C++ 추상 함수와 추상 클래스(Abstract Class) 그리고 인터페이스(Interface) 순수 가상 함수(Pure Virtual Function) 순수 가상 함수는 구현이 없는 가상 함수로, 파생 클래스에서 반드시 재정의해야 하는 함수를 의미합니다. 순수 가상 함수는 클래스의 선언에서 = 0 으로 표시됩니다. class Base { public: virtual void pureVirtualFunction() = 0; // 순수... 2024.02.02 풀스택 개발, C++ 가상 소멸자 (Virtual Destructor) 기본적으로 C++에서 소멸자는 클래스 인스턴스가 소멸될 때 호출되어 자원을 해제하는 역할을 합니다. 하지만 상속 관계에 있는 클래스들에서는 조금 더 신경 써야 할 부분이 있습니다. 예를 들어, 다음과 같은 클래스 구조를 생각해 봅시다. class Base { public: Base() { cout << "Base ... 2024.02.01 풀스택 개발, C++ 가상 함수(virtual function)와 가상 함수 테이블(vtable) 가상 함수(virtual function)란 C++ 프로그래밍 언어는 객체 지향 프로그래밍(OOP)을 지원하며, 그 중 다형성(polymorphism)이 중요한 개념 중 하나입니다. 다형성을 구현하는 한 방법으로, 가상 함수는 유연성과 확장성을 크게 향상시킵니다. 가상 함수(virtual function)는 기본 클래스에서 선언되고, 파생 클래스... 2024.01.27 풀스택 개발, C++ 정적 멤버 함수와 this 포인터 객체 지향 프로그래밍(OOP)에서 중요한 개념은 클래스와 객체입니다. 클래스는 객체를 생성하는 설계도로, 클래스로부터 생성된 실체를 인스턴스라고 합니다. 이러한 인스턴스는 자신을 가리키는 특별한 포인터, this 포인터를 가지고 있습니다. 이 포인터는 인스턴스의 멤버에 접근할 수 있게 하지만, 정적 멤버 함수에서는 사용될 수 없습니다. 정적 멤버... 2024.01.25 풀스택 개발, C++ 클래스(Class)와 암시적 멤버 메서드 C++에서 클래스는 객체 지향 프로그래밍의 핵심 요소로, 데이터와 이 데이터를 조작하는 함수를 하나의 모듈로 묶는 역할을 합니다. C++에서 클래스는 변수(멤버 데이터) 와 함수(멤버 함수) 를 포함하는 사용자 정의 타입입니다. 클래스의 기본 구조 클래스는 class 키워드를 사용하여 정의하며, 일반적으로 다음과 같은 형태를 가집니다. clas... 2024.01.23 풀스택 개발, C++ 디폴트 매개변수 (Default parameters) 디폴트 매개변수(default parameters)는 프로그래밍에서 함수를 선언할 때 매개변수에 미리 기본값을 설정하는 것으로써, 함수 호출 시 해당 매개변수를 생략할 수 있게 해주는 기능입니다. 이는 함수의 사용성을 향상시키고 코드의 간결성을 높여주며, 여러 함수 오버로드를 만드는 것보다 간편할 수 있습니다. 디폴트 매개변수는 주로 함수 선언 시... 2024.01.23 풀스택 개발, C++ (백준/C++) 2485_가로수 2485번: 가로수 (acmicpc.net) 문제는 모든 가로수 간의 간격을 같게 만들기 위해서는 가로수를 어떤 간격으로 심어야 하는지를 묻는 문제입니다. 접근법 모든 간격을 동일하게 만들기 위해서는 공통의 간격을 찾아야 합니다. 이때, 가장 적게 심을 수 있는 공통 간격을 찾는 것이 중요합니다. 공통 간격을 찾는다는 것은 달리 말하자면, 현재 ... 2024.01.05 풀스택 개발, 코딩테스트 공용체(union) 공용체(Union)은 구조체(Struct)와 같이 여러 멤버 변수를 가실 수 있지만, 이 멤버 변수들이 하나의 메모리 공간을 공유하는 형태입니다. 이는, 메모리를 절약하고, 같은 메모리 위치에 서로 다른 데이터 타입을 저장해야 하는 상황에서 유용하게 쓰일 수 있습니다. struct MyStruct { int int1; short short1... 2024.01.04 풀스택 개발, C++ (백준/C++) 1735_분수합 1735번:분수 합 (acmicpc.net) 문제는 단순히 두 분수를 입력 받아 합한 다음에 기약분수로 만드는 문제입니다. 다만, 기약분수로 만들 때, 분자와 분모의 최대 공약수(GCD)를 구하고 이를 이용하면 됩니다. 최대 공약수(GCD)는 아래 글에서 확인할 수 있습니다. 유클리드 호제법과 최대 공약수(GCD), 최소 공배수(LCM) 풀이 ... 2024.01.02 풀스택 개발, 코딩테스트 구조체 패딩 (Structure Padding) 구조체 패딩(Structure Padding) 은 CPU가 데이터를 읽을 때, 읽기 쉬운 위치에 배치하기 위해 컴파일러가 구조체 멤버 사이에 추가 공간을 삽입하는 기법을 말합니다. 즉, 메모리 공간을 일부 희생하더라도 CPU가 더 쉽고 빠르게 데이터를 읽을 수 있도록 빈 공간을 만드는 것입니다. 예를 들어, 다음과 같이 구조체를 만들고 결과를 보도... 2023.12.28 풀스택 개발, C++ 구조체(Struct) 구조체(Struct)는 연관된 여러 데이터를 하나의 단위로 묶어 처리하기 위해 사용되는 구조화 된 데이터입니다. 만약, C에서 struct를 사용하지 않고 프로그래밍을 하라고 한다면 데이터 관리나 함수 호출 등에서 가독성이 좋지 않게 되고, 유지보수도 어려워 질 것입니다. 예를 들어, 학생 정보를 관리하기 위해 이름, 나이, 학점 등을 각각의 변수... 2023.12.28 풀스택 개발, C++ [함수 포인터] 04. 함수 포인터를 보기 좋게 만들기 이전에 함수 포인터는 매우 유연한 프로그래밍을 만들기 좋은 도구지만, 매번 함수 포인터를 만들기에는 조금 코드가 많아지거나 보기 불편할 수 있습니다. 이를 간단하게, 보기 좋게 만드는 방법은 몇 가지 존재합니다. typedef로 기존의 타입에 새로운 별칭을 만들어주는 방법. (새로운 타입처럼 사용하기) using을 사용하여 기본 타입에 새... 2023.12.27 풀스택 개발, C++ [함수 포인터] 03. 일급 객체와 고차 함수 이 전에 다룬 콜백 함수와 델리게이트의 글에 이어 일급 객체 (First-Class Citizen)와 고차 함수 (Higher-Order Function)에 대해서 설명하겠습니다. 우선, 간단하게 설명하자면, 일급 객체는 변수에 할당하거나 다른 함수에 전달할 수 있는 객체를 의미합니다. 고차 함수는 함수형 프로그래밍의 핵심 개념 중 하나로, 코드... 2023.12.24 풀스택 개발, C++ [함수 포인터] 02. 콜백 함수와 델리게이트 콜백 함수(Callback function)와 델리게이트(Delegate)는 프로그램의 유연성과 확장성을 증가시켜주는 고급 프로그래밍 기법입니다. 프로그래밍을 하다 보면 종종 다양한 상황에 맞추어 동작을 변경해야 할 때가 있습니다. 이러한 상황에서 콜백 함수와 델리게이트는 다양한 상황에서 동작을 변경시켜 주면서도 디커플링을 유지시켜주는, 매우 유연한... 2023.12.22 풀스택 개발, C++ [함수 포인터] 01. 함수 포인터와 멤버 함수 포인터 프로그램에서 정의된 함수는 프로그램 실행 시 메모리에 로드됩니다. 이때, 함수의 이름은 실제로 해당 함수의 기계어 코드가 저장된 메모리 주소를 참조하는 식별자로 사용됩니다. 이 주소는 함수 코드의 시작 지점을 나타내며, 이를 통해 함수를 간접적으로 호출할 수 있습니다. 함수 포인터는 이러한 함수의 시작 주소를 저장하는 변수입니다. 즉, 함수 포인... 2023.12.20 풀스택 개발, C++ (백준/C++) 2293_동전 1 2293번: 동전 1 (acmicpc.net) 문제는 n가지 종류의 동전으로 k원의 가치를 만드는 동적 계획법(Dynamic Programming, DP) 문제입니다. 동적 계획법(Dynamic Programming, DP)이란, 큰 문제를 작은 문제들로 나누어 풀어나가고 작은 문제의 해를 저장해 다시 계산하지 않고 사용하는 방식입니다. 이 문제에... 2023.12.18 풀스택 개발, 코딩테스트 가변 파라미터 함수를 구현하는 방법 가변 파라미터(매개변수) 함수를 구현하는 방법은 C스타일과 C++(C++11) 스타일 2개가 존재합니다. C 스타일은 stdarg.h을 사용하고 C++ 스타일은 템플릿 가변 파라미터(Template)를 사용하는 것입니다. C 스타일 가변 파라미터 함수 C스타일의 가변 파라미터 함수는 __cdecl 함수 호출 규약을 사용합니다. __cdecl 호... 2023.12.17 풀스택 개발, C++ (백준/C++) 2629_양팔 저울 2629번: 양팔저울 (acmicpc.net) 문제는 주어진 무게추를 사용하여 만들 수 있는 모든 무게를 찾는 문제입니다. 문제의 그림에서 추와 구슬이 같이 그려져있어 자칫 어렵게 접근할 수도 있지만, 무게추들의 무게들을 전부 받은 후 그 무게추를 이용해서 만들 수 있는 모든 무게를 계산하면 여러 구슬에 대해서도 빠르게 풀어낼 수 있습니다. 무게추... 2023.12.16 풀스택 개발, 코딩테스트 함수 호출 규약 (cdecl, stdcall, thiscall, fastcall) 함수 호출 규약(Function Calling Convention)이란, 함수를 호출할 때 인자를 어떻게 전달하고, 함수가 반환될 때 어떻게 스택을 정리하는지에 대해 정의한 규칙입니다. 이 규약은 프로그래밍 언어, 컴파일러, 운영 체제, 아키텍처에 따라 다를 수 있습니다. 함수 호출 규약(Function Calling Convention) 사실 ... 2023.12.14 풀스택 개발, C++ (백준/C++) 11066_파일 합치기 11066번: 파일 합치기 (acmicpc.net) 문제는 여러 개의 파일을 하나로 합치는 과정에서 발생하는 비용을 최소화하는 문제입니다. 각 파일은 다른 크기를 가지고 있으며, 두 파일을 합칠 때 그 크기의 합만큼의 비용이 발생합니다. 이 문제를 동적 계획법으로 접근하면, 각 부분 문제의 최적 해를 찾아 전체 문제의 최적 해를 구할 수 있습니다. ... 2023.12.13 풀스택 개발, 코딩테스트 (백준/C++) 16928_뱀과 사다리 게임 뱀과 사다리 게임은 1번 칸에서 시작하여 주사위를 굴려 100번 칸까지 이동하는 게임입니다. 그런데 이때, 뱀 칸과 사다리 칸이 존재하고, 뱀 칸에 도착하면 낮은 칸으로 순간이동하고 사다리 칸에 도착하면 높은 칸으로 순간이동 하게 됩니다. 즉, 16928번: 뱀과 사다리 게임 (acmicpc.net) 문제는 100번 칸까지 이동하면서 최대한 사다리... 2023.12.10 풀스택 개발, 코딩테스트 (백준/C++) 2178_미로 탐색 2178번: 미로 탐색 (acmicpc.net) 문제는 시작 위치에서 도착 위치인 (N - 1, M - 1)까지 이동할 때 지나야 하는 최소의 칸 수를 찾는 문제입니다. 이때, 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타냅니다. 접근법 이 문제는 최단 경로를 찾는 문제이므로 너비 우선 탐색(BFS) 알고리즘을 사용해서 풀어... 2023.12.07 풀스택 개발, 코딩테스트 (백준/C++) 2606_바이러스 2606번: 바이러스 (acmicpc.net) 문제는 1번 컴퓨터가 웜 바이러스에 걸렸을 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 찾는 것입니다. 즉, 1번 컴퓨터에서 뻗어갈 수 있는 모든 정점들을 찾는 문제입니다. 이 문제는 그래프 문제로 깊이 우선 탐색(DFS, Depth-first search)나 너비 우선 탐색(BFS... 2023.12.04 풀스택 개발, 코딩테스트 (백준/C++) 11286_절댓값 힙 11286번: 절댓값 힙 (acmicpc.net) 문제는 힙을 절대값을 고려해서 만드는 문제입니다. 힙(heap)이란, 최대값이나 최소값을 빠르게 찾기 위한 완전 이진 트리를 기본으로 한 자료구조로, 매 삽입/삭제시 조건을 만족하는 정렬을 수행합니다. 이때 부모(P)와 자식(C) 사이의 정렬을 수행하지만, 자식간(LC, RC)의 정렬은 보장하지 않... 2023.11.30 풀스택 개발, 코딩테스트 (백준/C++) 2805_나무 자르기 2805번: 나무 자르기 (acmicpc.net) 문제는 이진 탐색(Binary search) 문제 중 파라메트릭 서치(Parametric search) 문제입니다. Parametric Search란? Parametric search는 이진 탐색(binary search)의 변형 중 하나로, 주로 최적화 문제를 결정 문제로 변환해 푸는 데 사용됩니... 2023.11.27 풀스택 개발, 코딩테스트 (백준/C++) 1654_랜선 자르기 1654번: 랜선 자르기 (acmicpc.net) 문제는 이진 탐색(Binary search) 문제 중 파라메트릭 서치(Parametric search) 문제입니다. Parametric Search란? Parametric search는 이진 탐색(binary search)의 변형 중 하나로, 주로 최적화 문제를 결정 문제로 변환해 푸는 데 사용됩니... 2023.11.26 풀스택 개발, 코딩테스트 (백준/C++) 6549_히스토그램에서 가장 큰 직사각형 히스토그램이란, 직사각형 여러 개가 아래쪽으로 정렬되어 있는 도형으로, 6549번: 히스토그램에서 가장 큰 직사각형 (acmicpc.net) 문제에서는 이 히스토그램에서 가장 넓이가 큰 직사각형을 분할 정복으로 구하는 방법을 물어보고 있습니다. 분할 정복(Divide and Conquer)이란, 큰 문제를 작은 부분 문제로 나누어 해결하고, 그 결과... 2023.11.20 풀스택 개발, 코딩테스트 (백준/C++) 11444_피보나치6 11444번: 피보나치 수 6 (acmicpc.net) 문제도 분할 정복(Divide and Conquer)으로 풀어볼 수 있습니다. 분할 정복이란, 큰 문제를 작은 부분 문제로 나누어 해결하고, 그 결과를 합쳐 원래 문제의 해결책을 찾는 방법입니다. 이 문제는 행렬의 곱셈과 관련있기 때문에, 다음의 문제들을 풀어보고 푸는 것을 추천 드립니다. ... 2023.11.17 풀스택 개발, 코딩테스트 (백준/C++) 1629_곱셈 1629번: 곱셈 (acmicpc.net) 문제도 분할 정복(Divide and Conquer)으로 풀어볼 수 있습니다. 분할 정복은 큰 문제를 작은 부분 문제로 나누어 해결하고, 그 결과를 합쳐 원래 문제의 해결책을 찾는 방법입니다. 이 문제는 A를 B번 곱할 때, 현존하는 자료형보다 커질 수 있기 때문에 C를 나눈 나머지를 사용합니다. 즉, ... 2023.10.15 풀스택 개발, 코딩테스트 (백준/C++) 1780_종이의 개수 1780번: 종이의 개수 문제는 분할 정복(Divide and Conquer) 문제입니다. 분할 정복은 큰 문제를 작은 부분 문제로 나누어 해결하고, 그 결과를 합쳐 원래 문제의 해결책을 찾는 방법입니다. 만약 이전에 1992번: 쿼드트리 (acmicpc.net) 문제나 2630번: 색종이 만들기 (acmicpc.net) 문제를 풀어보셨다면 쉽게 ... 2023.10.14 풀스택 개발, 코딩테스트 [L_Value & R_Value] 3. C++ 11 값 범주 (Lvalue, Xvalue, Prvalue) xvalue(eXpiring Value)는 C++ 11 이후에 추가된 개념으로 기존의 값 범주에서 변화가 생겼습니다. 때문에 값 범주가 기존의 개념보다 이해하고 정리하기 더 어려운 개념이 되어버린 것 같습니다. 이 글에서 저는 이 새로운 값 범주에 대해 제가 이해한 과정 정도를 글로 표현하고 정리 해둘까 합니다. C++ 11 이후의 값 범주 C... 2023.10.11 풀스택 개발, C++ (백준/C++) 1992_쿼드트리 1992번: 쿼드트리 (acmicpc.net) 문제는 분할 정복(Divide and Conquer) 문제입니다. 분할 정복은 큰 문제를 작은 부분 문제로 나누어 해결하고, 그 결과를 합쳐 원래 문제의 해결책을 찾는 방법입니다. 이 문제는 이전 색종이 만들기 문제를 풀었다면, 쉽게 풀 수 있는 문제입니다. 2630번: 색종이 만들기 (acmicpc... 2023.10.09 풀스택 개발, 코딩테스트 (백준/C++) 2630_색종이 만들기 2630번: 색종이 만들기 (acmicpc.net) 문제는 분할 정복(Divide and Conquer) 문제입니다. 분할 정복은 큰 문제를 작은 부분 문제로 나누어 해결하고, 그 결과를 합쳐 원래 문제의 해결책을 찾는 방법입니다. 문제의 예시 그림에서 볼 수 있듯이 가로 세로 절반씩 분할 후 모든 색이 칠해져 있는지 확인하고 그 색이 하얀색인지 ... 2023.10.08 풀스택 개발, 코딩테스트 (백준/C++) 13305_주유소 주유소 문제는 탐욕 알고리즘으로 풀 수 있는 문제입니다. 탐욕 알고리즘(Greedy Algorithm)이란, 매 순간 최적이라고 생각되는 방법을 선택하는 방식으로 문제를 해결하는 알고리즘입니다. 즉, 다른 경우의 수를 생각하지 않고 현 문제에서 가장 좋아 보이는 것을 선택하다 보면 문제가 풀리는 알고리즘 입니다. 13305번: 주유소 (acmic... 2023.10.05 풀스택 개발, 코딩테스트 [L_Value & R_Value] 2. 우측 값 참조와 이동(move semantics) 저도 우측 값 참조(rvalue reference)를 어느 정도 이해했다고 생각했는데, 글로 표현하기 위해 다시 공부하고 정리하면서도 아직 어렵고 난해한 것 같습니다. 따라서 저는 제가 이해한 정의만 나열하기보다 우선 제가 이해한 과정이나 정도만을 글로 표현하고 정리 해둘까 합니다. 먼저, 우측 값 참조(rvalue reference)를 이해하기 ... 2023.09.30 풀스택 개발, C++ (백준/C++) 1541_잃어버린 괄호 잃어버린 괄호 문제는 정렬을 사용하지 않아도 풀 수 있는 탐욕 알고리즘 문제입니다. 탐욕 알고리즘(Greedy Algorithm)이란, 매 순간 최적이라고 생각되는 방법을 선택하는 방식으로 문제를 해결하는 알고리즘입니다. 즉, 다른 경우의 수를 생각하지 않고 현 문제에서 가장 좋아 보이는 것을 선택하다 보면 문제가 풀리는 알고리즘 입니다. 154... 2023.09.28 풀스택 개발, 코딩테스트 (백준/C++) 11399_ATM 11399번: ATM (acmicpc.net) 문제는 탐욕(그리디) 알고리즘으로 풀 수 있는 문제입니다. 탐욕 알고리즘(Greedy Algorithm)이란, 매 순간 최적이라고 생각되는 방법을 선택하는 방식으로 문제를 해결하는 알고리즘입니다. 즉, 다른 경우의 수가 없이 현 문제에서 가장 좋아 보이는 것을 선택해 나가다보면 문제가 풀리는 알고리즘 ... 2023.09.27 풀스택 개발, 코딩테스트 (백준/C++) 1931_회의실 배정 탐욕 알고리즘(Greedy Algorithm)이란, 매 순간 최적이라고 생각되는 방법을 선택하는 방식으로 문제를 해결하는 알고리즘입니다. 즉, 다른 경우의 수가 없이 현 문제에서 가장 좋아 보이는 것을 선택해 나가다보면 문제가 풀리는 알고리즘 입니다. 1931번: 회의실 배정 (acmicpc.net) 문제는 어떻게 탐욕 알고리즘으로 풀 수 있는거지... 2023.09.25 풀스택 개발, 코딩테스트 [L_Value & R_Value] 1. 기본적인 L-Value와 R-Value 구분하기 C++에서 “값 범주”라고도 불리는 이 L-Value와 R-Value는 “이동”의 개념이 생기면서 좀 더 세분화 되었습니다. 그리고 좀 더 복잡해졌습니다. 이 세분화된 구분을 정리하기 전, 먼저 가볍게 L-Value와 R-Value에 대해서 이해하고 넘어가도록 하겠습니다. 그리고 저는 “이동”이라는 용어를 먼저 사용하지 않고 정리하도록 하겠습니다.... 2023.09.24 풀스택 개발, C++ (백준/C++) 11047_동전0 11047번: 동전 0 (acmicpc.net) 문제는 탐욕 알고리즘의 대표격인 문제로, 탐욕 알고리즘으로 풀 수 있는 문제입니다. 탐욕 알고리즘(Greedy Algorithm)이란, 매 순간 최적이라고 생각되는 방법을 선택하는 방식으로 문제를 해결하는 알고리즘입니다. 즉, 다른 경우의 수가 없이 현 문제에서 가장 좋아 보이는 것을 선택해 나가다보... 2023.09.23 풀스택 개발, 코딩테스트 인라인 함수(inline function) inline 함수란, 컴파일 타임에 함수 호출 위치에 함수 전체 코드를 삽입하는 것으로, 함수 호출에 의한 오버헤드를 줄이기 위해 사용되는 함수입니다. 따라서, 너무 많은 인라인 함수 사용은 프로그램의 크기가 커지게 될 수 있습니다. 가상 메모리를 사용하는 환경에서는 페이징 횟수가 늘어나 성능에 영향을 줄 수 있다고도 합니다. 이 인라인 함수를 선... 2023.09.21 풀스택 개발, C++ (백준/C++) 11660_구간 합 구하기 5 11660번: 구간 합 구하기 5 (acmicpc.net) 문제는 2차원 배열에서 누적 합을 통해 특정 구간의 합을 빠르게 계산하기 위한 방법을 묻는 문제입니다. 누적 합 문제는 구간에 있는 수의 합을 빠르게 계산하기 위한 방법입니다. 이를 이용하면 $O(N^2)$의 시간 복잡도로 누적 합 배열을 생성하고, 특정 구간의 합을 $O(1)$의 시간 복... 2023.09.20 풀스택 개발, 코딩테스트 Call By Value, Call By Address, Call By Reference 란? Call by Value, Call by Address, Call by Reference는 함수 호출 메커니즘에서 매개변수를 전달하는 세 가지 주요 방식으로, 실제 매개변수와 형식 매개변수가 어떻게 상호작용 하는지, 어떻게 쓰이는지에 따라 구분한 방식입니다. ‘Call by’는 함수 호출을 의미하며 Value, Address, Reference는 각... 2023.09.19 풀스택 개발, C++ RAII와 스마트 포인터 (Resource Acquisition Is Initialization) RAII(Resource Acquisition Is Initialization)는 주로 객체 지향 프로그래밍에서 자원을 효과적으로 관리하기 위한 패러다임입니다. MS Learn에 적혀있는 글을 읽어보면 MS에서는 “개체가 리소스를 소유한다는 원칙을 ‘리소스 획득은 초기화’ 또는 RAII라고도 합니다.” 라고 적혀있는 것을 볼 수 있습니다. 즉, R... 2023.09.18 풀스택 개발, C++ (백준/C++) 16139_인간-컴퓨터 상호작용 개요 16139번: 인간-컴퓨터 상호작용 (acmicpc.net) 문제는 특정 문자열 내에서 주어진 구간에 특정 알파벳이 몇 번 나타나는지 빠르게 구하는 문제로 누적 합 문제 카테고리에 속해 있습니다. 누적 합 문제는 구간에 있는 수의 합을 빠르게 계산하기 위한 방법입니다. 이게 왜 누적 합 문제인지 헷갈릴 수도 있지만, 알파벳이 나타나는 횟수를... 2023.09.17 풀스택 개발, 코딩테스트 스마트 포인터 (unique_ptr, shared_ptr, weak_ptr, auto_ptr) 기존 C/C++ 에서는 동적으로 할당 받은 메모리는 사용이 끝난 경우 반드시 해제해줘야 합니다. 만약, 메모리를 해제해주지 않으면 메모리 누수(memory leak)가 발생할 수 있습니다. 스마트 포인터(smart pointer)는 이런 프로그래머의 부담을 줄여줄 수 있는, 포인터처럼 동작하는 클래스 템플릿으로, 메모리 관리를 자동화하여 메모리 누수... 2023.09.16 풀스택 개발, C++ (백준/C++) 11659_구간 합 구하기 4 누적 합 문제는 구간에 있는 수의 합을 빠르게 계산하기 위한 방법입니다. 11659번: 구간 합 구하기 4 (acmicpc.net) 문제는 1차원 배열에서 특정 구간의 합을 빠르게 계산하기 위한 방법을 묻는 문제입니다. 이는 $O(N)$의 시간 복잡도로 누적 합 배열을 생성하고, 특정 구간의 합을 $O(1)$의 시간 복잡도로 계산할 수 있습니다. ... 2023.09.15 풀스택 개발, 코딩테스트 참조와 포인터 (Reference & Pointer) 포인터(Pointer)란? 포인터(Pointer)란, 메모리의 주소를 저장하는 변수입니다. 즉, 포인터는 초기화되지 않아도 되며 (nullptr 가능), 필요한 주소를 그때그때 저장할 수 있습니다. 또한, 포인터는 산술 연산을 통해 주소 값을 자료형의 크기만큼 더하거나 뺄 수도 있습니다. 특징 포인터는 다른 변수의 주소를 저장할 수 있습... 2023.09.14 풀스택 개발, C++ (백준/C++) 9251_LCS(Longest Common Subsequence, 최장 공통 부분 수열) LCS (Longest Common Subsequence, 최장 공통 부분 수열)은 두 개의 문자열에서 공통으로 나타나는 가장 긴 부분 수열을 찾는 동적 프로그래밍 알고리즘입니다. 이 알고리즘은 DNA 서열 분석부터 데이터 압축까지 다양한 응용 분야에서 사용할 수 있는 매우 중요한 알고리즘입니다. 하지만, 이 문제를 처음 접하게 되면 풀이 방법을 ... 2023.09.13 풀스택 개발, 코딩테스트 허상 포인터 (Dangling pointer) 발생 원인과 예방 방법 Dangling pointers는 유효한 객체를 가리키지 않는 포인터를 말합니다. 객체를 가리키고 있던 메모리가 해제된 후에 그 메모리 주소를 계속 참조하는 경우와 같은 경우로, 이 메모리 주소를 역참조하는 경우 정의되지 않은 동작(undefined behavior)이 발생할 수 있습니다. 정의되지 않은 동작(undefined behavior... 2023.09.12 풀스택 개발, C++ 포인터 (Pointer) 포인터(Pointer)란, 메모리의 주소를 저장하는 변수입니다. 이는 프로그래밍에서 중요한 역할을 하는데, 메모리의 특정 위치를 참조하고 그 위치에 저장된 값을 얻는 것을 역참조라고 합니다. 포인터를 사용하게 되면, 데이터를 복사하지 않기 때문에 데이터 구조를 효율적으로 순회하거나, 메모리를 직접 조작할 수 있어 훤씬 빠르고 메모리를 효율적으로 사용... 2023.09.11 풀스택 개발, C++ (백준/C++) 12865_평범한 배낭 12865번: 평범한 배낭 문제는 동적 계획법 문제로, 무게가 k인 배낭에 최대한 가치있는 물건을 넣을 수 있는 최적 해를 찾는 문제입니다. 동적 계획법(Dynamic Programming, DP)이란, 큰 문제를 작은 문제들로 나누어 풀어나가고 작은 문제의 해를 저장해 다시 계산하지 않고 사용하는 방식입니다. 우선, 동적 계획법 문제는 최적 부분... 2023.09.09 풀스택 개발, 코딩테스트 (백준/C++) 2565_전깃줄 2565번: 전깃줄 문제는 동적 계획법 문제이지만, 문제 풀이를 생각해내기 어려운 문제라고 생각됩니다. 동적 계획법(Dynamic Programming, DP)이란, 큰 문제를 작은 문제들로 나누어 풀어나가고 작은 문제의 해를 저장해 다시 계산하지 않고 사용하는 방식입니다. 우선, 이 문제도 동적 계획법 문제이기 때문에 최적 부분 구조와 중복된 부... 2023.09.08 풀스택 개발, 코딩테스트 (백준/C++) 10844_쉬운 계단 수 10844번: 쉬운 계단 수 문제는 동적 계획법으로 풀 수 있는 문제입니다. 동적 계획법(Dynamic Programming, DP)은 큰 문제를 작은 문제들로 나누어 풀어나가고 작은 문제의 해를 저장해 다시 계산하지 않고 사용하는 방식입니다. 동적 계획법 문제는 최적 부분 구조와 중복된 부분 문제의 두 가지 속성을 가진 문제에 유용합니다. 쉬운... 2023.09.06 풀스택 개발, 코딩테스트 (상수) const 와 constexpr const는 상수를 선언하는 제한자(qualifier)입니다. 즉, 한 번 초기화된 const 변수의 값은 변경할 수 없습니다. #define으로 상수처럼 사용할 수 있으나, const로 선언하는 경우에는 데이터형을 명시적으로 지정 할 수 있고, 활동 범위 규칙으로 특정 함수나 파일에서만 사용할 수 있도록 제한할 수 있습니다. const int x... 2023.09.05 풀스택 개발, C++ (백준/C++) 2156_포도주 시식 2156번: 포도주 시식 문제는 동적 계획법(Dynamic Programming)으로 풀어내는 문제이지만, 동적 계획법으로 풀어낼 때, 점화식을 생각하는데 어려울 수 있습니다. 규칙은 다음과 같습니다. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다. 연속으로 놓여 있는 3잔을... 2023.09.04 풀스택 개발, 코딩테스트 C++ 캐스팅 키워드 (static_cast, dynamic_cast, const_cast...) C++에서는 C보다 다양한 캐스팅 연산자를 제공하여 타입 변환을 수행할 수 있습니다. 이러한 캐스팅 연산자들은 각각 다른 목적과 사용법을 가지고 있으며, 잘못 사용하면 예상치 못한 문제를 일으킬 수 있습니다. 이 글에서는 static_cast, dynamic_cast, const_cast, reinterpret_cast에 대해 자세히 알아보고, 각... 2023.09.03 풀스택 개발, C++ VirtualAlloc (가상 메모리 할당 및 예약) virualAlloc이란, C++에서 프로그램 실행 시간 동안 메모리를 할당 받는 동적 할당 키워드 중 Windows 운영체제에서 가상 메모리를 할당하고 관리하는 함수입니다. 가상 메모리 공간은 물리 메모리보다 훨씬 크며, 운영체제가 관리합니다. 동적 할당 키워드 (new, malloc, calloc, realloc) 예약과 할당 Virtu... 2023.09.02 풀스택 개발, C++ (백준/C++) 11053_가장 긴 바이토닉 부분 수열 가장 긴 바이토닉 부분 수열 문제를 풀기 전에 가장 긴 증가하는 부분 수열 문제를 풀고 오는 것을 추천 드립니다. 11053번: 가장 긴 증가하는 부분 수열 가장 긴 증가하는 부분 수열 풀이 바이토닉 수열은 어떤 수열이 증가하다가 감소하는 형태를 갖는 수열입니다. 즉, 증가하다가 감소하게 되는 부분 수열들 중 가장 긴 값을 찾아야 합니다. 우... 2023.09.01 풀스택 개발, 코딩테스트 동적 할당 키워드 (new, malloc, calloc, realloc, virtualAlloc) 동적 할당 (Dynamic Allocation) 동적 할당은 프로그램 실행 중에 필요한 메모리 공간을 할당하는 프로그래밍 기법입니다. 정적 할당과 달리, 동적 할당은 실행 시간에 메모리의 크기와 위치를 결정하므로 더 유연하게 메모리를 관리할 수 있습니다. 동적 할당의 주요 장점은 메모리의 효율적인 사용입니다. 필요한 만큼의 메모리를 할당하고 해제... 2023.08.30 풀스택 개발, C++ (백준/C++) 11053_가장 긴 증가하는 부분 수열 가장 긴 증가하는 부분 수열(LIS: Longest Increasing Subsequence) 문제는 동적 계획법을 활용하여 풀 수 있습니다. 동적 계획법(Dynamic Programming, DP)이란, 큰 문제를 작은 문제들로 나누어 풀어나가고 작은 문제의 해를 저장해 다시 계산하지 않고 사용하는 방식입니다. 동적 계획법 문제는 최적 부분 구조... 2023.08.28 풀스택 개발, 코딩테스트 (백준/C++) 9461_파도반 수열 백준의 9461번: 파도반 수열 문제는 점화식을 찾기 쉬운 문제에 속합니다. 이미지가 그려져 있기 때문에, 이미지 속에서 패턴을 찾기만 하면 어렵지 않게 풀 수 있습니다. 이 문제는 동적 계획법(Dynamic Programming, DP)은 큰 문제를 작은 문제들로 나누어 풀어나가고 작은 문제의 해를 저장해 다시 계산하지 않고 사용하는 방식입니다. ... 2023.08.27 풀스택 개발, 코딩테스트 [static 키워드] 03_정적 멤버 함수 static 멤버 함수는 클래스의 인스턴스 없이 호출될 수 있는 함수로, static 멤버 변수처럼 공유 메모리 공간에 존재합니다. 따라서 객체 이름 뿐만 아니라 클래스 이름으로도 접근 가능하며, 객체와 독립적으로 존재합니다. 객체와 독립적으로 존재하기 때문에 공유 메모리에 존재하는 정적 멤버 변수가 아닌 객체가 각자 소유하고 있는 일반 멤버 변수... 2023.08.26 풀스택 개발, C++ [static 키워드] 02_정적 멤버 변수 static 멤버 변수는 클래스 객체가 생성되기 전, 프로그램 실행 시 Data 영역이나 BSS 영역에 할당 되며, 프로그램 실행 기간 동안 유지되는 변수입니다. 정적 멤버 변수는 프로그램 전체에서 단 하나의 공유 메모리 안에서 존재합니다. 즉, 어떤 객체를 생성해도 정적 멤버 변수는 같은 주소를 갖고, 객체와 독립적으로 존재한다는 뜻입니다. 따... 2023.08.25 풀스택 개발, C++ [static 키워드] 01_전역 정적 변수와 지역 정적 변수 정적 변수란? 정적 변수(static variable) 프로그램의 실행 시간 동안 메모리에 유지되는 변수입니다. 정적 변수는 컴파일 시간에 메모리가 할당되며, 초기화된 경우 Data 영역에, 초기화 되지 않은 경우 BSS 영역에 할당 됩니다. Static 키워드? static 키워드는 이런 정적 변수를 선언하는 키워드 입니다. 일반적으로 C언... 2023.08.24 풀스택 개발, C++ 외부 변수와 extern, 그리고 외부 링크 외부 변수란? 외부 변수(external variable)란, 지역 변수와 반대의 의미로, 모든 함수의 외부에 있는 변수를 말합니다. 즉, 모든 함수에서 이름으로 액세스 할 수 있는 변수(전역 변수)를 말합니다. 참고: 지역 변수, 전역 변수, 정적 변수, 동적 변수 extern 키워드는? extern 키워드는 전역 변수를 다른 파일에서 사용... 2023.08.23 풀스택 개발, C++ (백준/C++) 1904_01타일 1904번: 01타일 문제는 동적 계획법으로 풀 수 있는 문제입니다. 동적 계획법(Dynamic Programming, DP)이란, 큰 문제를 작은 문제들로 나누어 풀어나가고 작은 문제의 해를 저장해 다시 계산하지 않고 사용하는 방식입니다. 동적 계획법 문제는 최적 부분 구조와 중복된 부분 문제의 두 가지 속성을 가진 문제에 유용합니다. 01타일... 2023.08.22 풀스택 개발, 코딩테스트 (백준/C++) 2580_스도쿠 백준 2580번: 스도쿠 (acmicpc.net) 문제는 백트래킹으로 해결할 수 있는 문제입니다. 문제를 차근차근 풀어나가고 정리해보면 어렵지 않은 문제지만, 접근법에 따라 잔실수가 많을 수 있는 문제입니다. 저 같은 경우는 기저사례로 해 찾기를 끝내려고 시도했다가 값이 초기화 되어 돌아가는 문제가 생기거나 Loop 종료 조건에서 고민을 하고, 이... 2023.08.21 풀스택 개발, 코딩테스트 (백준/C++) 9663_N-Queen 백준 9663번: N-Queen (acmicpc.net) 문제는 백트래킹(backtracking) 문제의 대표 주자격인 문제입니다. 이 문제는 체스판에 퀸을 놓는 모든 가능한 방법을 찾을 때, 백트래킹 알고리즘을 사용합니다. 백트래킹이란, 해를 찾는 도중에 그 해가 정답이 될 수 없다는 것이 판명되면 즉시 다른 해를 찾는 방법입니다. 이 경우, ... 2023.08.20 풀스택 개발, 코딩테스트 지역 변수, 전역 변수, 정적 변수, 동적 변수 C언어에서는 데이터를 변수라는 식별자에 저장해서 언제든지 해당 메모리를 다시 접근해 데이터를 사용할 수 있게끔 되어 있습니다. 여기에서 몇 가지 알아야 할 부분은, 코드에서 각각 접근할 수 있는 영역입니다. 지역 변수 (자동 변수) 스택(Stack) 영역에 할당되는, 블록 안으로 사용 범위가 제한되는 변수입니다. 지역 변수는 블록(지역) 내에서... 2023.08.20 풀스택 개발, C++ (백준/C++) 15649_N과 M(1) 백준 15649번: N과 M은 백트래킹을 시작하기 좋은 연습문제라고 생각됩니다. 이번 문제에서는 값을 순회하고 각 수에 대한 방문 여부를 체크하는 것으로 배열과 재귀 함수를 통해 구현해봤습니다. 이때, 각 수에 대한 방문 여부를 판단하는 것이 백트래킹의 역할입니다. 즉, DFS로 모든 경우의 수를 찾아가면서, 백트래킹을 통해 이미 선택된 숫자... 2023.08.18 풀스택 개발, 코딩테스트 문자열을 정수, 실수로 변환하기 문자열을 정수나 실수로 변환하는 과정에는 여러가지가 있습니다. C 언어에서 <cstdlib> 헤더의 std::atoi()나 std::atof() 함수를 사용하는 방법, <string> 헤더의 std::stoi()나 std::stof() 함수를 사용하는 방법, 그리고 std::stringstream 을 사용하는 방법이 있습니다. ... 2023.08.18 풀스택 개발, C++ 정수(int), 실수(float)를 문자열로 변환하기 정수나 실수를 문자열로 변환하는 방법에는 여러가지가 있습니다. 가장 흔히 쓸 수 있는 std::to_string()부터 std::stringstream을 사용하는 방법, 그리고 안전하지 않지만 sprintf()를 사용하는 방법이 있습니다. std::to_string() std::to_string() 함수는 C++의 <string> 헤더... 2023.08.17 풀스택 개발, C++ (백준/C++) 11729번_하노이 탑 하노이의 탑 문제는 재귀 문제의 대표주자격 문제입니다. 11729번: 하노이 탑 이동 순서 (acmicpc.net) 문제는 3개의 기둥과 그 위에 있는 서로 다른 크기의 원반이 주어지고, 첫 번째 기둥에서 세 번째 기둥으로 모든 원반을 이동시키는 것이 목표입니다. 이때, 두 가지 규칙이 존재하는데, 한 번에 한 개의 원판만을 다른 탑으로 옮... 2023.08.16 풀스택 개발, 코딩테스트 (백준/C++) 2447번_별 찍기 - 10 2447번: 별 찍기 - 10 (acmicpc.net) 문제는 분할 정복(divide and conquer)과 재귀(recursion)에 대한 문제입니다. 분할 정복이란, 큰 문제를 작은 문제로 나누고 그 결과를 조합해 원래 문제를 해결하는 방법입니다. 이 문제는 분할 정복 문제이므로 재귀적인 접근법과 함께 생각해야 합니다. 1. 기저 사례 설정... 2023.08.15 풀스택 개발, 코딩테스트 이스케이프 문자(escape character) 이스케이프 문자(escape character) 혹은 이스케이프 시퀀스(escape sequence)란, 특정 문자를 표현 또는 출력 제어를 하기 위한 특수한 문자입니다. 예를 들어, printf() 로 다음과 같은 문장을 출력하려고 합니다. NPC_01 “Hello World!” 이 경우, 문자열을 표현하는 큰따옴표와 문자열 내부의 큰따옴표가 ... 2023.08.15 풀스택 개발, C++ (백준/C++) 4779번_칸토어 집합 4779번: 칸토어 집합 (acmicpc.net) 문제는 분할 정복(divide and conquer)과 재귀(recursion)에 대한 문제입니다. 분할 정복이란, 큰 문제를 작은 문제로 나누고 그 결과를 조합해 원래 문제를 해결하는 방법입니다. 칸토어 집합 이해하기 우선 칸토어 집합이란 간단히 말해서 길이가 1인 선분에서 1/3부터 2/3까지... 2023.08.14 풀스택 개발, 코딩테스트 (백준/C++) 1021번_회전하는 큐 1021번: 회전하는 큐 (acmicpc.net) 문제는 양방향 큐인 덱(Deque)을 이해하고 나서, 덱(Deque)으로 원하는 요소를 빼낼 수 있는 최소한의 횟수를 찾아내면 되는 문제입니다. 좀 더 설명하자면, 원하는 요소를 찾을 때까지 요소들을 이동시키고, 원하는 요소를 찾으면 해당 요소를 빼내는데, 최소한의 횟수만으로 빼내야 하는 문제입니다.... 2023.08.13 풀스택 개발, 코딩테스트 매크로와 주의점 매크로란? C언어와 C++에서 매크로란 #define 전처리 구문(선행처리 지시문)으로 전처리기가 컴파일 전에 정해진 구문을 정해진 문장으로 치환해주는 기능을 말합니다. (여기서 ‘정해진 구문’이란 매크로의 이름을, ‘정해진 문장’이란 그 이름에 대응하는 코드를 의미합니다.) 말이 조금 어려우니, 간단히 설명하자면, 자주 사용되는 값을 편하게 쓸... 2023.08.13 풀스택 개발, C++ (백준/C++) 5430번_AC 5430번: AC (acmicpc.net) 문제는 양방향 큐인 덱(Deque)을 이해하기 매우 좋은 문제라고 생각합니다. 그렇게 생각하는 이유중 하나는 이 문제에서 “함수 R은 배열에 있는 수의 순서를 뒤집는 함수이고, D는 첫 번째 수를 버리는 함수이다.” 라는 부분 때문입니다. 임의 접근 가능한 컨테이너를 잘 쓰거나 양방향 컨테이너를... 2023.08.12 풀스택 개발, 코딩테스트 C#의 JIT 컴파일이란? C#이나 JAVA와 같은 언어들은 JIT(Just-In-Time) 컴파일을 사용합니다. .NET에서의 C#은 전통적인 컴파일 언어와 인터프리터 언어의 특성을 혼합한 하이브리드 언어로 이해할 수 있습니다. 컴파일 언어적 특성 IL 컴파일: C# 코드는 먼저 C# 컴파일러에 의해 중간 언어(Intermediate Languag... 2023.08.11 풀스택 개발, CSharp (백준/C++) 1966번_프린터 큐 1966번: 프린터 큐 (acmicpc.net) 문제는큐의 속성을 이해하는 것과 동시에우선순위에 따라 출력하는 것이 핵심인 문제입니다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치한다. 그렇지 않... 2023.08.10 풀스택 개발, 코딩테스트 운영체제별 C++ 자료형의 크기와 범위 C++의 변수 앞에는 자료형(데이터 타입)을 지정할 수 있습니다. 자료형 타입은 다양한 크기와 다양한 표현(정수, 실수, 문자)이 존재하며, 사용하고자 하는 목적에 맞게 지정할 수 있습니다. C++의 운영체제(16, 32, 64비트)별 자료형들의 크기가 어떻게 되는지 한 번 알아보겠습니다. 플랫폼별 자료형 크기 Windows와 Unix, L... 2023.08.10 풀스택 개발, C++ (백준/C++) 4949번_균형잡힌 세상 4949번: 균형잡힌 세상 (acmicpc.net) 문제는 Stack을 활용한 짝 맞추기 문제입니다. 괄호의 짝이 잘 맞는지(여는 괄호와 닫는 괄호의 짝이 맞는지) 확인하고, 짝이 맞거나 없다면(틀린 짝이 없다면) ‘yes’를, 짝이 틀리면 ‘no’를 출력하는 문제입니다. 이전에, 9012번: 괄호 (acmicpc.net) 문제를 풀어보셨다면 쉽게... 2023.08.09 풀스택 개발, 코딩테스트 C++ 빌드(컴파일) 과정 C++에서 우리가 작성한 소스 코드를 실제 실행할 수 있는 실행 파일로 변환하기 위해서는 빌드라는 과정이 필요합니다. C++의 빌드 과정은 네 가지 단계로,전처리(Preprocessing),컴파일(Compile),어셈블링(Assemble),링킹(Linking) 순서로 이루어집니다. 전처리 과정에서는 코드 내의 전처리 구문을 처리하고 컴파일러가 이해... 2023.08.09 풀스택 개발, C++ (백준/C++) 9012번_괄호 9012번: 괄호 (acmicpc.net) 문제는 Stack에 관한 문제로, 짝이 맞는지 안맞는지 테스트하는 동작을 만드는 짝 맞추기 문제입니다. 스택의 순서 보장과 역순서 보장의 특성을 이용해 마지막에 넣은 값과 짝이 맞는지 확인하기만 하면 되는 문제입니다. 주의 사항 이 문제를 풀어가는데 있어서 쉽게 넘어갈 수 있는 주의해야 할 점은 다음 두... 2023.08.07 풀스택 개발, 코딩테스트 C++과 C#의 차이 C++과 C#은 둘 다 객체지향 언어로 게임 개발(Unreal, Unity)에 사용되는 언어입니다. 두 언어 모두 각각의 특징이 있고, 장단점이 있는 언어입니다. C++는 기계어 코드로 직접 컴파일되기 때문에, 빠른 실행이 가능하고 개발자가 직접 메모리를 관리할 수 있기 때문에 메모리 관리 측면에서도 유연하고 효율적입니다. 반면, C#은 .NET ... 2023.08.07 풀스택 개발, C++