java 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

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

컴퓨터 구조 관점에서 바라본 C언어 포인터와 Java

포인터와 컴퓨터 구조의 관계컴퓨터의 메모리는 수많은 작은 공간들이 일렬로 늘어선 형태를 가지고 있다. 각 공간은 고유한 주소를 가지고 있으며, 이는 마치 아파트의 호수와 같다. 1970년대 초기 컴퓨터 시스템에서는 제한된 메모리를 최대한 효율적으로 사용해야 했고, 이러한 배경에서 포인터가 탄생했다.메모리의 물리적 구조를 이해하면 포인터의 필요성이 더욱 분명해진다. CPU는 메모리에서 데이터를 읽고 쓸 때 반드시 주소를 통해 접근한다. 포인터는 이러한 컴퓨터의 기본 작동 방식을 프로그래밍 언어 수준에서 직접 다룰 수 있게 해주는 도구다.역사적 맥락에서 본 포인터1972년 데니스 리치가 C언어를 개발할 당시, 컴퓨터의 하드웨어 자원은 매우 제한적이었다. 8비트 프로세서와 64KB 미만의 메모리가 일반적이던 ..

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 1: 입출력 최적화

Java 코딩테스트 완벽 가이드 - Part 1: 입출력 최적화의 모든 것 코딩테스트에서 가장 먼저 마주치는 것이 바로 입출력이다. 특히 백준에서는 입출력 처리 방식에 따라 시간 초과가 날 수 있어 최적화된 입출력 방식을 아는 것이 중요하다. 이 글에서는 Java로 코딩테스트를 준비하는 분들을 위해 입출력 처리 방법을 상세히 설명한다.1. Scanner vs BufferedReader많은 초보자들이 Scanner를 사용하지만, 대부분의 경우 BufferedReader를 사용하는 것이 좋다. 그 이유를 살펴보자.BufferedReader의 장점버퍼 사용으로 인한 속도 향상Scanner는 내부적으로 정규표현식을 사용하여 문자열을 파싱한다BufferedReader는 버퍼에 일정량의 데이터를 모아서 한 번에 처..

DSA/코딩테스트 2025.01.22

99클럽 코테 스터디 7일차 TIL - Java 백준 15829 해싱

[백준 15829] Hashing - 해시 함수 구현하기🌟 Today's Focus해시 함수의 기본 개념문자열을 활용한 수학적 연산모듈러 연산과 오버플로우 처리Java의 문자열 처리📝 Today I Learned 보자마자 모니터 덮고 이불 속으로 들어가고 싶어지는 텍스트 압박 등장. 사실 처음에 비기너 문제가 아닌데 잘못 들어온 줄 알았다.도무지 풀 의욕이 들지 않아서 미들러 문제 구경 갔더니 DFS & BFS 문제더라 ㅎㅎ그래서 다음을 기약하고 다시 해싱을 진득하게 복습하기로 했다^_^... 처음엔 보기 싫어서 눈을 질끈 감았었는데,일단 풀기 위해서 문제를 읽어보니 해싱에 대한 자세한 소개글이 길 뿐이었다.1. 문제 분석 (재정의)문제를 봤을 때 수식이 있어서 겁먹었다.그래서 가장 먼저 한 건 수식..

DSA/코딩테스트 2025.01.22