DSA/코딩테스트 18

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

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

Java 코딩테스트 완벽 가이드 - Part 2: 필수 메서드 및 시간복잡도 총정리

코딩테스트를 준비하다 보면 비슷한 메서드를 반복해서 사용하게 된다. 이번에는 카테고리별로 꼭 알아야 할 메서드들과 그 내부 동작 원리를 정리한다.1. 문자열 처리 메서드1.1 Static 메서드 vs 인스턴스 메서드[동작 원리]String 클래스는 내부적으로 문자들을 char[] 배열로 저장한다. static 메서드인 valueOf()는 입력값을 새로운 문자열로 변환만 하면 되므로 객체 상태가 필요 없어 static으로 구현된다. 반면 substring()과 같은 인스턴스 메서드는 객체가 가진 문자 배열의 특정 부분을 사용해야 하므로 인스턴스 메서드로 구현된다.String 메서드 종류와 특징구분Static 메서드인스턴스 메서드대표 메서드String.valueOf() String.format()str.su..

DSA/코딩테스트 2025.01.22

Java 코딩테스트 완벽 가이드 Part 1. 입출력 심화 - Scanner와 BufferedReader의 동작 원리

이번에는 Scanner와 BufferedReader/BufferedWriter의 내부 동작 원리를 이해하고, 왜 특정 방식으로 코드를 작성해야 하는지 설명한다.1. Scanner의 동작 원리1.1 Scanner를 new로 생성하는 이유Scanner sc = new Scanner(System.in);Scanner는 클래스이며 상태(state)를 가지고 있다:입력 스트림의 현재 위치구분자(delimiter) 패턴내부 버퍼로케일(locale) 정보이런 상태 정보는 객체마다 다르게 유지되어야 하므로 new로 인스턴스를 생성한다.1.2 Scanner의 한계int num = sc.nextInt(); // 내부적으로 발생하는 일// 1. 문자열 읽기// 2. 정규표현식으로 파싱// 3. 정수로 변환// 4. 예외 ..

DSA/코딩테스트 2025.01.22