Java 24

[코테/Java] Hash | 프로그래머스 Lv1. 두 개 뽑아서 더하기

투포인터 학습 흐름 만난 문제지만, 실제로는 TreeSet으로 풀었다. "중복 제거 + 정렬"을 동시에 해결하는 방법을 고민하다가 TreeSet을 처음 알게 됐다.1. 문제 분석 문제 요약정수 배열 numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를, 오름차순으로 정렬된 배열로 반환한다. 핵심 요구사항중복 제거 — 같은 합이 여러 조합으로 나와도 한 번만오름차순 정렬 — 최종 결과는 정렬된 상태2. 풀이 과정1차 의사코드1. numbers 오름차순 정렬2. 이중 for문을 돌면서 두 수의 합을 hashset에 넣는다.3. 다시 한번 sort해서 return 한다. 막혔던 포인트 ① - 원본 배열 정렬이 필요한가?처음엔 numbers 자체를 미리 정렬해야 한다고 ..

[코테/Java] 투포인터 문제 풀이 | 푸드 파이트 만들기 (프로그래머스 Level 1)

1. 문제 분석 문제 요약대회에 참가하는 모든 사람은 두 팀(선수 / 관중)으로 나뉘는데, 각 선수는 자신이 먹을 음식의 종류와 양이 같아야 한다. 정수 배열 food가 주어질 때, 양쪽 선수가 사이좋게 나눠 먹을 수 있는 음식의 순서를 문자열로 반환한다. 입출력 예시food = [1, 3, 4, 6] → "12233330333221" 핵심 키워드 → 알고리즘 연결키워드연결되는 알고리즘"양쪽이 같은 양을 먹어야 한다"좌우 대칭 구조"정렬된 구간에서 양쪽으로 채워나가기"투포인터 사고방식 투포인터 자체를 직접 쓰는 문제는 아니었지만,"왼쪽과 오른쪽이 대칭"이라는 점에서 투포인터를 배울 때의 사고방식(양 끝에서 좁혀가며 채운다)과 닿아있었다.2. 풀이 과정1차 의사코드food를 마지막 인덱스부터 1번 인덱스까..

StringBuilder를 써야 하는 이유와 자주 쓰는 메서드 정리

1. 필요한 이유String은 불변(immutable) 객체다. answer += "1"처럼 문자열을 더하면, 사실은 기존 값을 복사해서 새로운 String 객체를 만드는 거다.String answer = "";for (int i = 0; i 이걸 반복하면 매번 점점 길어지는 문자열을 복사하느라 전체 시간이 O(n²)까지 늘어날 수 있다. StringBuilder는 가변(mutable) 객체라서, 내부 버퍼에 직접 추가만 한다.복사가 필요 없어서 훨씬 빠르다.2. 사용하는 경우문자열을 반복적으로 이어 붙여야 할 때 (for문, while문 안에서 문자열 누적)문자열을 거꾸로 뒤집어야 할 때문자열의 특정 부분을 수정/삭제/삽입해야 할 때최종적으로 String 하나를 "조립"해서 반환해야 할 때3. 핵심 ..

투포인터(Two Pointer) 개념 정리

1. 왜 필요한가정렬된 배열에서 "두 원소의 관계(합, 차 등)"를 찾을 때, 이중 for문(O(n²))보다 빠르게 풀기 위해 사용한다.두 개의 포인터가 배열 양 끝(또는 같은 방향)에서 움직이며 탐색 범위를 줄여나간다.2. 어떤 문제에서 사용하는가정렬된 배열에서 특정 합/차를 만족하는 두 수 찾기정렬된 배열에서 특정 구간(부분 배열) 찾기두 개의 정렬된 배열을 병합하거나 비교할 때(변형) 슬라이딩 윈도우 — 연속된 부분 구간 문제 키워드 → 알고리즘 연결키워드떠올려야 할 것"두 값의 합/차가 특정 값"투포인터"정렬된 배열에서 구간 찾기"투포인터"연속된 부분 구간"슬라이딩 윈도우 (투포인터 변형)3. 핵심 아이디어정렬된 배열, left = 0(시작), right = n-1(끝)while (left ta..

Computer Science 2026.06.19

[코테/Java] 정렬 문제풀이 | H-index (프로그래머스 Level 2)

1. 문제 분석H-Index 정의H-Index는 과학자의 생산성과 영향력을 나타내는 지표다.어떤 과학자가 발표한 논문 n편 중,h번 이상 인용된 논문이 h편 이상이고나머지 논문이 h번 이하 인용되었다면h의 최댓값이 이 과학자의 H-Index다.정의가 처음에는 헷갈렸는데, 예시로 풀어보면 명확해진다. 입출력 예시citations = [3, 0, 6, 1, 5] → 35편의 논문 중 3편이 3회 이상 인용되었다.그래서 H-Index는 3이다. 핵심 키워드 → 알고리즘 연결키워드연결되는 알고리즘"h번 이상 인용된 논문이 h편 이상"정렬 후 조건 탐색2. 풀이 과정왜 뒤에서부터 순회해야 하는가배열을 오름차순 정렬하면, 뒤에서 몇 번째인지가 "몇 편 이상 인용됐는지"와 자연스럽게 연결된다.[0, 1, 3, 5, ..

[코테] Queue | 프로그래머스 Lv2. 기능개발

https://foreverwon.tistory.com/entry/자료구조-Stack과-Queue-개념 Stack과 Queue 개념Stack — 프링글스 통넣을 때도 위에서, 꺼낼 때도 위에서마지막에 넣은 게 먼저 나오는 구조 → LIFO (Last In First Out)push(1) → [ 1 ]push(2) → [ 1 | 2 ]push(3) → [ 1 | 2 | 3 ]pop() → [ 1 | 2 ] 꺼낸 값: 3pop() →foreverwon.tistory.com📌 문제 분석각 기능의 진도와 작업 속도가 주어집니다. 앞 기능이 완료되어야 뒤 기능도 배포할 수 있을 때, 각 배포마다 몇 개의 기능이 함께 배포되는지 구하세요.핵심 조건앞 기능이 완료되지 않으면 뒤 기능은 배포 불가같은 날 완료되는 기..

[코테] Hash | 프로그래머스 Lv2. 전화번호 목록 - HashSet으로 접두사 검사

처음엔 방향을 잘못 잡았지만, 핵심 아이디어를 잡고 나니 깔끔하게 풀렸다.이번에 새로 배운 건 "왜 HashSet이 이중 for문보다 빠른가" 였다.1. 문제 분석입출력 파악phone_book = ["119", "97674223", "1195524421"]정답: false→ "119"가 "1195524421"의 앞부분(접두사)이므로 falsephone_book = ["119", "1123"]정답: true→ "119"가 "1123"의 접두사? No→ "1123"이 "119"의 접두사? No→ 어떤 번호도 다른 번호의 접두사가 아님 → true문제 핵심"어떤 번호가 다른 번호의 앞부분(접두사)인지" 를 찾는 문제다.2. 풀이 아이디어처음 접근 (틀린 방법)처음엔 이렇게 생각했다.// 잘못된 접근// Set..

[코테] Hash | 프로그래머스 Lv1. 신고 결과 받기 (+ 복합 자료구조)

저번에는 HashMap과 HashSet의 기본 개념을 익히고 "완주하지 못한 선수"를 풀었다.이번 문제는 그걸 조합해서 써야 하는 문제이다.1. 문제 분석입출력 파악id_list = ["muzi", "frodo", "apeach", "neo"]report = ["muzi frodo", "apeach frodo", "frodo neo", "muzi frodo"] // "muzi frodo" 중복!k = 2정답: [2, 1, 1, 0]흐름을 말로 풀면 이렇다.1. "muzi frodo" 중복 → 1번만 처리2. frodo는 muzi, apeach에게 신고당함 → 2번 = k 이상 → 정지3. neo는 frodo에게 신고당함 → 1번 = k 미만 → 정지 안 됨4. muzi는 frodo, neo 신고 → ..

[코테] HashMap과 HashSet 개념 & '완주하지 못한 선수' 풀이

1. HashMap기본 개념HashMap은 Key-Value 쌍으로 데이터를 저장하는 자료구조다."alice" → 1"bob" → 2사물함으로 비유하면 이해가 쉽다. 번호(Key)로 내용물(Value)을 꺼내는 것처럼, 이름(Key)으로 횟수(Value)를 꺼낼 수 있다.Key는 중복이 불가능하다. 같은 Key로 값을 넣으면 기존 Value가 덮어써진다. map.put("alice", 1);map.put("alice", 2); // "alice"가 이미 있으므로 덮어씀// 결과: {"alice": 2} 딱 1개만 존재Value는 중복이 가능하다. map.put("alice", 2);map.put("bob", 2); // Value 중복 → 괜찮음// 결과: {"alice": 2, "bob": 2..

JVM 동작원리| 메모리 구조, GC 원리, 값 전달 방식까지

1. JVM 메모리 구조JVM이란?JVM(Java Virtual Machine) 은 Java 바이트코드를 현재 OS와 CPU에 맞게 번역하고 실행해주는 가상 머신이다.Java 코드를 컴파일하면 .class 파일(바이트코드)이 생성되는데, 이 바이트코드는 특정 OS에 종속되지 않는 중간 언어다. JVM이 이 바이트코드를 읽어 실제 실행 환경에 맞게 처리한다.Java 소스코드 (.java) ↓ javac 컴파일바이트코드 (.class) ↓ JVM 실행OS/CPU에 맞게 번역 후 실행 JVM이 필요한 이유 — Write Once, Run AnywhereC언어는 OS마다 따로 컴파일해야 하지만, Java는 JVM만 설치되어 있으면 어느 OS에서든 동일하게 실행된다. JVM이 OS와 Java..

Computer Science 2026.04.29
728x90