전체 글

· Java
1. 프로그래밍 패러다임 개요명령형(Imperative): 어떻게(How) 실행할지를 상세히 기술절차지향(Procedural), 객체지향(OOP)이 포함선언형(Declarative): 무엇(What)을 할지를 선언하고 구현 방식은 추상화SQL, HTML, 함수형 프로그래밍 등이 속함 ​2. 함수형 프로그래밍이란?정의: 순수함수(pure function)를 조합하고,부수효과(side effect)와 가변상태(mutable state)를 최소화하는 선언형 스타일핵심 특징순수 함수(Pure Function)부수 효과 최소화 (Side Effect Minimization)불변성(Immutable State)일급 시민 함수(First-class Functions)선언적 접근(Declarative)함수 합성(Com..
· Java
고급 3편 자바 섹션12 병렬 스트림1️⃣ 단일 스트림 (Sequential Stream)한 줄씩 순서대로 실행됨 → main 스레드 1개 사용성능: 1초 작업 × 8개 → 8초 소요int sum = IntStream.rangeClosed(1, 8) .map(HeavyJob::heavyTask) // 1초 작업 .sum();[main] calculate 1 → 10 ... [main] calculate 8 → 80 총 소요 시간: 약 8000ms 2️⃣ 스레드 직접 사용 (Thread 객체)직접 Thread를 만들어 작업 분할 처리예: thread-1, thread-2가 병렬 수행Thread t1 = new Thread(() -> task(..
PCCP 기출문제를 풀어봤다.오랜만에 힐링문제였다..체력이 0이하가 되면 바로죽는걸 처음에 반영못해 90/100이나왔다.항상 조건에주의하자!def solution(bandage, health, attacks): answer = 0 t, x, y = bandage time = success_streak = 0 hp = health i = 0 while i 0 else -1
지게차로 겉에있는것을 꺼낼때만 주의하면된다.패딩을 둘러준뒤 (0,0)부터 BFS상하좌우 빈칸들을 탐색한다.이때 탐색칸이 빈칸이면 다음 탐색후보이기에,q에넣는다.만약 target값이면 삭제가능하기에, 제거후보에 넣어준다.전체 빈칸들 탐색이 끝나면, 제거후보들의 값을 모두삭제해준다. 순서를 정리하면 아래와같다. 1. 패딩 추가그리드를 빈칸('')으로 둘러싸 (0,0)을 “외부 빈 공간”으로 만듦2. BFS 탐색(0,0)에서 출발해 상·하·좌·우로 빈칸만 따라 들어감빈칸이면 큐에 추가하여 계속 확산target 문자가 나오면 즉시 “제거 후보”에 기록(큐에는 넣지 않음)3. 제거 수행BFS가 끝난 뒤, 기록된 모든 제거 후보 위치의 값을 빈칸('')으로 바꿔 삭제 Python 풀이from collectio..
· Java
고급 3편 자바 섹션11 Optional1. Optional이 필요한 이유NullPointerException(NPE): null 참조 접근 시 런타임 예외 발생.가독성 저하: if (obj != null) 반복.의도가 불명확: 반환값이 null일지 아닐지 메서드만 보고 알 수 없음.➡️ 이를 해결하기 위해 Java 8에서 Optional 클래스가 도입됨.2. Optional 생성 방법Optional.of("value") // null 아님 확신Optional.ofNullable(value) // null 가능성 있음Optional.empty() // 명시적 빈값3. Optional 값 꺼내기 (get() 대신 아래 사용 권장)opt.orElse("기본값"); //..
· Java
자바 스트림(Stream) API 핵심 정리스트림(Stream)이란?데이터 흐름을 추상화한 자바 8 기능Collection, 배열 등을 선언형 방식으로 연속 처리 가능마치 데이터가 "물 흐르듯" 연산 파이프라인을 따라 처리됨🔄 스트림 처리 흐름1. 스트림 생성List list = List.of("A", "B");Stream stream = list.stream(); 2. 중간 연산 (Intermediate Operation)데이터 변환 or 필터링.filter() – 조건 필터링.map() – 요소 변환3. 최종 연산 (Terminal Operation)스트림 소비 → 실행 시작! .toList() – 리스트로 변환.forEach() – 요소마다 실행4. 내부 반복 방식 → 루프 직접 작성 필요 없음 ..
· Java
메서드 참조란?이미 정의된 메서드를 람다 표현식 대신 간결하게 표현하는 문법예: (x, y) -> add(x, y) → 클래스명::메서드명메서드 참조의 4가지 유형1. 정적 메서드 참조클래스의 static 메서드 참조Math::max, Integer::parseInt2. 특정 객체의 인스턴스 메서드 참조인스턴스를 명확히 지정person::introduce3. 생성자 참조생성자 호출 참조Person::new4. 임의 객체의 인스턴스 메서드 참조매개변수로 들어오는 객체의 메서드 참조Person::introduce, String::toUpperCase1. 메서드 참조를 쓰는 이유코드 간결화: 람다식보다 짧고 명확중복 제거: 공통 로직을 하나의 메서드로 참조 가능가독성 향상: add(x, y)처럼 내부 구현만 ..
· Java
본 내용은 강의 내용 뿐 아니라, 추가 공부 정리 내용도 포함합니다. 혹시 잘못된 내용이 있다면 지적 적극환영! :) ✅ 섹션 4 람다활용 - 필터, 맵🔹 1. 람다의 활용: 필터(Filter)와 맵(Map)Filter (Predicate): 조건에 맞는 요소만 골라내기Map (Function): 요소를 다른 값으로 변환하기// 짝수 필터filter(numbers, n -> n % 2 == 0);// 문자열 길이로 변환map(strings, s -> s.length());2. 유틸리티 패턴화 → 재사용성 증가GenericFilter 와 GenericMapper 클래스를 만들어 모든 타입에 유연하게 대응 가능함.GenericFilter.filter(numbers, n -> n > 5);GenericMap..
https://www.acmicpc.net/problem/2461 구간 내 모든반이 한명이상 포함되는 조건에서,능력치 최대-최소 차이를 구한다. 슬라이딩 윈도우의 정석같은 문제. 조건을 만족하는 연속된 구간중 최소 or 최댓값을 구하는문제. 풀이left와 right 두 포인터로 구간을 설정한다.이 구간(left ~ right) 안에 모든 반이 최소 한 명씩 포함되어 있다면, → left를 오른쪽으로 이동시키며 구간을 좁혀가고,그때마다 능력치의 차이(최댓값 - 최솟값)를 계산해 최솟값을 갱신한다.반대로, 모든 반이 포함되지 않았다면 → right를 오른쪽으로 이동시켜 구간을 확장한다.import sysfrom collections import defaultdictinput = sys.stdin.readli..
· Java
Java Lambda & invokedynamic 심층 분석1. 들어가며Java 8부터 도입된 람다 표현식(Lambda Expression)은 코드를 간결하게 만들고 함수형 프로그래밍 스타일을 지원하기 위한 핵심 기능이다. 단순한 문법적 설탕(syntactic sugar)처럼 생각할 수 있지만, 실제 내부 동작은 전혀 다르다. 특히 invokedynamic 명령과 LambdaMetafactory의 역할을 알면 람다의 진짜 정체와 동작 메커니즘을 깊이 이해할 수 있다. (이 글에서는 초보자도 따라오기 쉽도록 쉽게 글을 써봤습니다.혹시 읽다가 틀린내용이 있으면 알려주면 감사하겠습니다.) 3. 람다와 익명 클래스의 차이점Runnable r1 = () -> System.out.println("Lambda"); ..
고쩡이
고민보다 Go