728x90

2026/02/05 8

[BOJ 2839] 설탕 배달 - [그리디/수학]

[BOJ 2839] 설탕 배달 - [그리디/수학]문제 링크https://www.acmicpc.net/problem/2839문제 요약설탕 $N$kg을 3kg봉지와 5kg봉지를 사용하여 정확하게 배달해야 할 때, 사용하는 봉지의 최소 개수를 구하는 프로그램 작성 (정확하게 나누어 떨어지지 않으면 -1 출력).접근 방법자료구조: 정수형 변수 (int)알고리즘: 그리디 알고리즘 (Greedy Algorithm)핵심 아이디어: 1. 가장 큰 단위인 5kg 봉지를 최대한 많이 사용하는 것이 유리함. 2. 현재 무게 $N$이 5로 나누어떨어질 때까지 $N$에서 3kg을 하나씩 빼면서 봉지 개수를 증가시킴. 3. 만약 $N$이 0보다 작아지면 불가능한 경우로 판단.풀이 코드#include using namespace ..

코딩테스트 2026.02.05

[BOJ 1436] 영화감독 숌 - [브루트포스 알고리즘]

[BOJ 1436] 영화감독 숌 - [브루트포스 알고리즘]문제 링크https://www.acmicpc.net/problem/1436문제 요약숫자 내에 '666'이 연속으로 들어가는 수를 "종말의 수"라고 할 때, $N$번째로 작은 종말의 수를 구하는 프로그램을 작성하시오. ($N \leq 10,000$)접근 방법자료구조: 사용되지 않음 (기본 정수형 및 문자열 처리)알고리즘: 브루트포스 (완전 탐색)핵심 아이디어: - 첫 번째 종말의 수인 666부터 1씩 증가시키며 모든 숫자를 확인합니다.해당 숫자를 문자열로 변환한 뒤, "666"이라는 부분 문자열이 포함되어 있는지 검사합니다.$N$번째 종말의 수를 찾을 때까지 이 과정을 반복합니다.풀이 코드#include #include using namespace ..

코딩테스트 2026.02.05

[BOJ 1018] 체스판 다시 칠하기 - [브루트 포스]

[BOJ 1018] 체스판 다시 칠하기 - [브루트 포스]문제 링크https://www.acmicpc.net/problem/1018문제 요약$N \times M$ 크기의 보드에서 $8 \times 8$ 크기의 체스판을 잘라내어, 인접한 칸의 색이 겹치지 않도록 다시 칠해야 하는 칸의 최소 개수를 구하는 문제입니다.접근 방법자료구조: 2차원 문자열 배열 (std::vector)알고리즘: 브루트 포스 (Brute Force)핵심 아이디어: - 체스판이 가질 수 있는 완성된 형태는 딱 두 가지(맨 왼쪽 위가 'W'인 경우와 'B'인 경우)뿐입니다.보드 내에서 $8 \times 8$로 자를 수 있는 모든 경우의 수를 순회하며, 두 가지 완성 형태와 비교하여 최소 수정 횟수를 갱신합니다.풀이 코드#include ..

코딩테스트 2026.02.05

Java 비동기

Java도 비동기 처리가 아주 잘 되어 있습니다.하지만 Java(Spring)와 TypeScript(NestJS)는 비동기를 대하는 '태도' 가 조금 다릅니다. TypeScript는 태생부터 비동기가 필수였던 반면, Java는 멀티스레드라는 강력한 무기를 바탕으로 비동기 기술을 점진적으로 발전시켜 왔거든요.Java에서 비동기를 처리하는 대표적인 방법들은 다음과 같습니다.1. 초기 방식: FutureJava 5부터 도입된 개념입니다. "지금 당장 결과는 없지만, 나중에 줄게"라는 약속권 같은 것이죠. 하지만 결과를 받을 때까지 기다려야(Blocking) 하는 한계가 있었습니다.2. 현대적 방식: CompletableFuture (Java 8+)TypeScript의 Promise와 가장 유사한 개념입니다. ..

기술 학습 2026.02.05

TypeScript는 싱글 스레드

TypeScript(Node.js)는 멀티스레드가 아니라 기본적으로 '싱글 스레드(Single Thread)' 기반으로 동작합니다.Java/Spring은 요청이 들어올 때마다 스레드를 새로 생성하거나 스레드 풀에서 꺼내 쓰는 방식이지만, TypeScript가 돌아가는 환경인 Node.js는 조금 다른 방식을 취합니다.1. 왜 싱글 스레드인가요?TypeScript는 결국 JavaScript로 변환되어 실행됩니다. JavaScript의 엔진(V8)은 한 번에 하나의 작업만 수행하는 싱글 스레드 이벤트 루프(Event Loop) 방식을 사용합니다.Spring: 손님이 올 때마다 요리사(스레드)를 새로 고용함. 요리사가 많으면 동시에 여러 요리를 하지만 비용이 많이 듬.NestJS (Node.js): 요리사는 ..

기술 학습 2026.02.05

NestJS와 Spring에 연관성

"NestJS는 Node.js 진영의 Spring이다" 라는 말은 개발자들 사이에서 거의 공식처럼 통하는 비유입니다.Java와 Spring을 경험해 보셨거나 들어보셨다면, NestJS가 왜 TypeScript를 선택했는지 단번에 이해하실 수 있습니다. 둘의 닮은 점을 비교해 드릴게요.NestJS와 Spring의 평행이론특징Java / SpringTypeScript / NestJS언어Java (정적 타입)TypeScript (정적 타입)핵심 개념제어의 역전 (IoC), 의존성 주입 (DI)제어의 역전 (IoC), 의존성 주입 (DI)코드 스타일어노테이션 (@Service, @RestController)데코레이터 (@Injectable, @Controller)구조계층형 아키텍처 (Controller-Serv..

기술 학습 2026.02.05

NestJS는 왜 TypeScript를 사용할까?

NestJS를 사용할 때 JavaScript가 아닌 TypeScript를 고집하는 이유는 단순히 '유행' 때문이 아닙니다. NestJS 자체가 TypeScript의 기능을 최대한 활용하도록 설계된 프레임워크이기 때문이죠.만약 NestJS에서 TypeScript를 빼버린다면, 마치 엔진(NestJS)은 슈퍼카인데 연료(JS)가 저옥탄가인 상황과 비슷해집니다. 그 구체적인 이유는 다음과 같습니다.1. 데코레이터(Decorators) 기반의 설계NestJS 코드를 보면 @Controller(), @Get(), @Injectable() 같은 코드들이 자주 보이죠? 이것이 바로 데코레이터입니다.TypeScript의 특권: 데코레이터는 클래스와 메서드에 메타데이터를 추가하는 기능으로, TypeScript에서 아주 ..

기술 학습 2026.02.05

TypeScript란?

1. TypeScript란 무엇인가?자바스크립트는 매우 유연하지만, 실행해보기 전까지는 어디서 에러가 날지 알기 어렵다는 단점이 있습니다. 마이크로소프트가 만든 TypeScript는 자바스크립트의 상위 집합(Superset)으로, 코드를 실행하기 전 컴파일(Compile) 단계에서 오류를 잡아내는 정적 타입 언어입니다.2. 왜 사용하는가? (장점)단순히 "자바스크립트도 있는데 왜 굳이?"라는 의문이 들 수 있죠. 핵심 이유는 다음과 같습니다.버그 예방: 변수나 함수의 형태를 미리 정의하기 때문에, 엉뚱한 데이터를 넣어서 발생하는 런타임 에러를 사전에 차단합니다.강력한 자동 완성: VS Code 같은 에디터가 코드의 의도를 완벽히 이해합니다. 함수에 어떤 인자가 필요한지 일일이 기억할 필요가 없죠.유지보수..

기술 학습 2026.02.05
728x90