DSA 21

복잡도와 핵심 자료구조 (C++, Java, Python 예시)

🧠 [5.1 복잡도] 이해 완전 정복면접을 위한 CS 전공지식노트 p.231 - 262 기반으로 작성.✅ 복잡도가 뭐지?알고리즘의 성능을 수치화한 기준입니다. 복잡도는 코드가 얼마나 빠르고 효율적으로 동작하는지를 판단하는 ‘시간과 공간 자원의 소비량’을 나타내는 척도예요.시간 복잡도(Time Complexity): 코드가 실행되는데 걸리는 시간 (≒ 반복 횟수)공간 복잡도(Space Complexity): 코드가 실행될 때 사용하는 메모리 공간⏱️ 5.1.1 시간 복잡도💡 시간 복잡도란?입력의 크기(n)가 커질수록, 코드가 얼마나 더 느려지는지를 보는 것.실제 걸리는 ‘초’ 단위 시간은 아니고, 입력 크기에 비례하는 ‘연산 횟수’를 수학적으로 나타낸 것이에요.💡 왜 중요할까?예를 들어:O(n²) 알..

DSA 2025.05.19

LeetCode 2529. Maximum Count of Positive Integer and Negative Integer -

정렬된 배열에서 양수와 음수 개수 세기 Java 완전탐색 vs 이진탐색완전탐색: O(N) 이진탐색: O(log n) LeetCode의 "Maximum Count of Positive Integer and Negative Integer" 문제를 풀면서 접근 방식에 따른 성능 차이를 체감할 수 있었다. 처음에는 가장 직관적인 방법으로 접근했지만, 문제 조건을 다시 살펴보며 더 효율적인 방법을 발견하는 과정이 흥미로웠다.문제 파악문제는 정렬된 배열에서 양수와 음수의 개수를 세고, 둘 중 더 큰 값을 반환하는 것이었다. 0은 카운트하지 않는다.첫 번째 접근: 브루트포스처음에는 당연하게도 배열을 순회하며 각 요소를 확인하는 방식으로 접근했다. public int maximumCount(int[] nums) { ..

DSA/코딩테스트 2025.03.16

알고리즘이란

(출처 - gcfglobal)1. 알고리즘의 정의알고리즘이란, 간단히 말해서 "문제를 해결하기 위한 명확한 절차"를 의미한다. "An Efficient method for solving a problem using a finite sequence of instructions": "유한한 인스트럭션들의 연속을 통해 문제를 해결하는 효율적인 방법""A list of well-defined instructions for completing a task": "어떠한 태스크를 끝내기 위해서 잘 정의된 명령어들의 리스트"여기서 주목할 점:Instructions(명령어): 컴퓨터가 이해할 수 있는 명확한 지시사항well-defined(잘 정의된): 다르게 해석될 여지가 없는efficient(효율적인): 최소한의 리소..

DSA 2025.03.10

99클럽 코딩테스트 스터디 5기 수료 자세한 후기

스터디를 찾게 된 계기코딩테스트 준비를 어떻게 시작해야 할지 막막했다. 입출력 문법만 겨우 알고 있던 내가 문제를 보면 대부분 무슨 말인지 이해하기도 어려웠고, 설령 이해했다 해도 어떻게 풀어나가야 할지 감이 잡히지 않았다. 혼자서 프로그래머스 문제를 몇 개 풀어보려 했지만, 어떤 문제부터 풀어야 할지도 모르겠고 꾸준히 하기도 쉽지 않았다. 그러던 중 99클럽을 알게 됐는데, 매일 문제를 제공해주고 진도도 체크해준다는 점이 눈에 띄었다. 특히 비기너부터 챌린저까지 난이도별로 문제가 나온다는 게 입문자인 나에게 딱 맞아 보였다. 알고리즘 이론 강의도 함께 신청할 수 있는데, 자바로 참여하는데 강의 언어는 파이썬이라서 듣진 않았다. 파이썬 비기너였으면 고려했을지도. 스터디 참여 경험매일 11시가 되면 항해9..

DSA/코딩테스트 2025.02.25

99클럽 코테 스터디 22일차 TIL - Java 백준 18870 좌표 압축

🌟 Today's FocusBOJ 18870 좌표 압축핵심 개념: 정렬, 중복 제거, 값-인덱스 매핑자료구조: ArrayList/TreeSet, HashMap알고리즘: 정렬 📝 Today I Learned오랜만에 코테 푸는데 정렬이라고 좀 만만하게 봤다가 큰코 다침.문제 분석 ( 재정의 )https://www.acmicpc.net/problem/18870 "Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다."라는 문장의 의미를 처음에 이해 못했다;;막상 까고 보니 "각 숫자보다 작은 서로 다른 숫자들의 개수를 세는 것"이더라...... 외국어 해석하는 줄 알았음.아무튼 N개의 수를 공백으로 구분해서 던져주면, 그걸 '좌표 압축'해서 뱉어내야 된..

DSA/코딩테스트 2025.02.18

99클럽 코테 스터디 16일차 TIL - Java 프로그래머스 더 맵게

🔍 프로그래머스 "더 맵게"https://school.programmers.co.kr/learn/courses/30/lessons/42626?language=java🎯 오늘의 학습 포인트오늘은 자료구조 선택이 알고리즘의 성능과 코드 품질에 얼마나 큰 영향을 미치는지 깊이 있게 이해하게 됐다. 특히 값들을 정렬된 상태로 유지하면서 최소값을 반복적으로 찾아야 하는 상황에서는, 단순히 리스트를 매번 정렬하는 것보다 PriorityQueue를 사용하는 것이 훨씬 효율적이라는 점을 배웠다. 실제로 시간복잡도가 O(N²logN)에서 O(NlogN)으로 크게 개선되는 것을 경험했다. 문제 난이도가 높지 않아서 의도를 재차 재해석하면서 이 의도를 좀 더 명확히 드러내보려고 시도했다. 같은 결과를 내는 두 가지 접근..

DSA/코딩테스트 2025.02.11

배열로 시작하는 코딩테스트 첫걸음: 시행착오와 성장의 기록

프로젝트 팀원들과 코딩테스트 스터디를 시작했다. 일주일 만에 끝내야 했는데 영 속도가 나지 않았다. 아직 한 문제 푸는 데 너무 오래 걸리더라. 처음에는 특히 문제 자체를 해석하는 것부터 어려웠는데 이제는 그래도 문제 요구사항을 이해하고 어떻게 해야겠다까지는 나오고는 있다. 코딩테스트를 처음 시작하면서 많은 두려움이 있었다. Java와 Spring을 배우며 개발자를 꿈꾸게 되었지만, 알고리즘은 늘 큰 산처럼 느껴졌다. 그래서 가장 기초적인 자료구조인 배열부터 시작하기로 했다. 이 글은 배열 문제를 통해 알고리즘적 사고를 키워나가 변했는지 기록하기 위해 작성한다.첫 발걸음: 기본기의 중요성을 깨닫다알고리즘 공부를 시작하면서 가장 먼저 마주한 것은 기본적인 입출력 처리였다. Scanner만 사용하다가 Buf..

DSA/코딩테스트 2025.02.04

그래프 알고리즘 BFS & DFS 정복 feat. 백준 2573번 빙산 찾기, Softeer 장애물 인식

목차들어가며: 왜 그래프 탐색 알고리즘을 알아야 할까?그래프(Graph)란?그래프의 종류와 특징실전 예시: 미로 찾기로 이해하는 그래프BFS(너비 우선 탐색)3.1 개념과 특징3.2 BFS의 동작 원리큐(Queue)를 활용한 BFS 동작 과정BFS의 작동 예시: 미로 탐색3.3 BFS 구현하기: Softeer '장애물 인식 프로그램'문제 설명BFS로 해결하는 방법3.4 BFS의 시간복잡도 이해하기DFS(깊이 우선 탐색)4.1 개념과 특징4.2 DFS의 동작 원리스택(Stack)과 재귀(Recursion) 방식 비교4.3 DFS 구현하기: 백준 2573번 빙산문제 설명DFS로 해결하는 방법4.4 DFS의 시간복잡도 이해하기BFS vs DFS: 어떤 상황에서 무엇을 선택할까?BFS와 DFS의 주요 차이점어떤..

DSA/코딩테스트 2025.02.04

99클럽 코테 스터디 9일차 TIL - Java 백준 31562 전주 듣고 노래 맞히기

[Java 코딩테스트] 백준 31562번 - 전주 듣고 노래 맞추기 (feat. HashMap)백준 31562 "전주 듣고 노래 맞추기" 게임을 구현하는 문제를 풀어보았다. 처음에는 단순해 보였지만, 생각보다 많은 고민이 필요했다.혼자서는 도저히 풀이가 떠오르지 않아 구글링의 도움을 받았다. 특히 HashMap과 ArrayList를 함께 사용하는 방식은 다른 개발자들의 블로그를 참고하면서 배웠다.🌟 오늘의 학습 키워드HashMap과 ArrayList를 활용한 데이터 관리와 중복 처리를 학습했다. 또한 StringBuilder를 통한 출력 최적화와 String 메소드 활용 방법도 익혔다.📝 문제 분석처음에는 단순히 배열에 저장하고 찾으면 되겠다고 생각했다. 하지만 문제를 자세히 보니 까다로운 부분들이 ..

DSA/코딩테스트 2025.01.24

99클럽 코테 스터디 8일차 TIL - Java 백준 32978 아맞다마늘

🌟 [백준 32978] 아 맞다 마늘 해결하기📝 Today I Learned오늘은 깜빡하고 뺀 재료를 찾는 문제를 풀어보았다. 처음엔 간단해 보였지만, 생각보다 많은 시행착오를 겪었다.1. 문제 분석 (재정의)N개의 전체 재료 중에서 N-1개만 사용했을 때, 빠진 1개 재료를 찾는 문제다.재료는 대소문자를 구분하며, 중복된 재료는 입력되지 않는다.결국 "차집합"을 구하는 문제라고 볼 수 있다.2. 문제 접근 방식처음에는 배열로 하나씩 순차 비교하려고 했다. 그런데 문득 이런 생각이 들었다.지금은 몇 개 없다고 하지만, N-1개를 일일이 비교하면... 시간이 너무 오래 걸리지 않을까?그래서 해시 자료구조를 떠올렸다. 처음엔 HashMap을 쓸까 고민했는데, 키-값 쌍까지는 필요 없었다.그냥 재료의 존재..

DSA/코딩테스트 2025.01.22