목록2025/04 (40)
변수의 기록

1. 시간 복잡도란?**시간 복잡도(Time Complexity)**는 어떤 함수나 알고리즘이 **입력값의 크기(n)**에 따라 얼마나 많은 연산을 수행하는지를 표현한 것. 다시 말해, 알고리즘이 실행되기까지 필요한 연산 스텝의 수를 의미한다.이때 중요한 건, 정확한 시간(초)이 아니라 입력의 크기 n에 따라 시간이 어떻게 증가하는지를 분석하는 것.2. 점근적 분석이란?시간 복잡도를 분석할 때는 보통 입력값 n이 **매우 커지는 상황(무한대에 가까워질 때)**을 상정한다. 이를 점근적(Asymptotic) 분석이라 하며, 다음과 같은 특징이 있다:덜 중요한 항은 무시한다예: f(n) = 2n² + 3n + 1 → 점근적으로 n²만 남는다.계수도 무시한다예: f(n) = 100n² → O(n²)로 표현한다..
불변 객체란 뭘까?프로그래밍 하다 보면 "이 객체 상태가 바뀌면 안 되는데..." 싶은 순간이 있죠.그럴 때 딱 맞는 개념이 바로 불변 객체(Immutable Object)입니다.불변 객체는 한 번 만들면 내부 상태가 절대 바뀌지 않는 객체를 말해요.객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사(defensive-copy)를 통해 제공한다.쉽게 말해, 생성 이후에는 그냥 읽기 전용! (read-only) 왜 불변 객체가 좋을까?.1. 코드가 깔끔하고 안전함상태가 안 바뀌니까 예상 못 한 사이드 이펙트도 없고, 디버깅도 쉬워져요.특히 협업할 때 다른 사람이 뭘 건드릴까 걱정 안 해도 되는 게 제일 큼.2. 자료구조와 찰떡궁합Map, Set, Cache 같은 데서 많이 쓰이는데,값이 안 ..

사용자 정의 객체와 HashSet, HashMap에서의 중복 처리자바에서 HashSet이나 HashMap 같은 해시 기반 컬렉션은 객체의 중복 여부를 판단하기 위해 내부적으로 hashCode()와 equals() 메서드를 사용한다. 이 글에서는 개발자가 직접 정의한 클래스를 해시 테이블에 넣을 때, 중복을 어떻게 처리하고, 주의할 점은 무엇인지 정리한다.1. 중복 판단 기준HashSet이나 HashMap은 객체를 저장하거나 검색할 때 다음 절차를 따른다:hashCode()로 해시값을 계산 → 어느 버킷(인덱스)에 저장할지 결정해당 버킷 안에서 equals()로 같은 객체인지 판단즉, 같은 해시값을 가지면서 equals()도 true여야 동일한 객체로 간주되어 중복 저장이 되지 않는다.2. 개발자가 해야 ..
문제첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.입력첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 출력첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.예제 입력 1 5예제 출력 1 * ** *** ********* 내가 제시한 답 import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int A = sc.nextInt(); for (int i = 1; i A - i) { ..
출처 - 백준 2525번 문제문제KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다.또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.입력첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 ..
코딩 테스트, 이제 나의 기록을 시작하며이직을 준비하면서, CS 공부를 정리하는 블로그를 꾸준히 써왔다.그 과정에서 문득 이런 생각이 들었다.단순히 지식을 쌓는 것만큼이나,나의 사고 과정을 돌아보고 기록하는 일도매우 소중하다는 것.그래서 코딩 테스트 문제들도단순히 "정답을 맞혔다"는 결과에만 집중하지 않고왜 이 방식은 더 나았는지,다른 방법은 왜 채택하지 않았는지스스로 되묻고 돌아보는작은 회고록처럼 정리해보려고 한다.이 시작이 어쩌면 초라해 보일 수도 있다.시작한 지 며칠 되지 않았고,이미 훌륭한 전공자들과 뛰어난 개발자들이 많다는 사실에잠시 주춤하기도 했다.하지만 좌절하지 않을 것이다.나는 머리가 뛰어난 사람은 아닐지 몰라도성실함과 통찰력이라는 나만의 강점을 믿는다.그리고 그 믿음을 바탕으로천천히, 그..

1. Set이란 무엇인가? (ADT 관점)Set은 데이터를 저장하는 추상 자료형(ADT) 중 하나입니다.특징적으로 다음과 같은 성질을 가집니다:중복을 허용하지 않는다요소의 순서를 보장하지 않는다데이터의 존재 유무를 빠르게 확인할 수 있다이러한 동작을 제공하는 구조만 정의된 것이 Set이라는 ADT이고,Java에서는 Set 인터페이스와 이를 구현하는 다양한 클래스(HashSet, LinkedHashSet, TreeSet)를 통해 이 ADT를 실현합니다.2. Set의 사용 목적 및 언제 사용하는가✅ Set이 유리한 상황중복 제거가 필요한 경우→ 예: 사용자 입력값 정제, 태그 중복 제거 등순서가 중요하지 않은 데이터 집합→ 예: 허용된 IP 주소 목록, 이미 방문한 노드 기록 등특정 데이터가 존재하는지 여부..

1. Map의 개념핵심 특징Key - Value 쌍으로 구성Key는 중복 불가, Value는 중복 가능Key를 기준으로 빠르게 검색 및 저장 가능Java에서는 Map 인터페이스를 통해 이 ADT를 정의하고, 여러 구현체를 제공합니다.2. Map의 주요 구현체구현체특징HashMap내부적으로 Hash Table 구조 사용. 평균 O(1) 접근TreeMap내부적으로 Red-Black Tree 기반. O(log n) 접근LinkedHashMap해시 구조 + 삽입 순서 유지이 글에서는 가장 널리 사용되는 HashMap을 기준으로 설명합니다.3. Hash Table 기반 Map 구조HashMap은 내부적으로 다음 구조를 가집니다:📌 구성 요소배열: 일정 크기의 버킷 공간 (예: 8, 16 등)Hash 함수: Ke..