java 17

[Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리

가비지 컬렉션이란 뭘까?  소프트웨어를 개발하면서 사용이 끝난 메모리가 적절히 해제되지 않으면 가비지(Garbage)'가 쌓일 수 있습니다.사용되지 않는 메모리가 남아 가비지(Garbage)가 발생할 수 있는데 C 언어에서는 이러한 메모리를 직접 관리해야 하며, free() 함수를 통해 수동으로 해제합니다. 하지만 Java나 Kotlin과 같은 언어에서는 개발자가 메모리 해제를 직접 수행하지 않아도 됩니다. 이는 JVM의 가비지 컬렉터(Garbage Collector)가 자동으로 불필요한 메모리를 정리해주기 때문입니다.[ JVM 메모리 구조 ]--------------------------------------------------------| Heap Memory ..

[프로그래머스][JAVA] 43236. 징검다리

💡 문제징검다리(https://school.programmers.co.kr/learn/courses/30/lessons/43236)자세한 문제 설명과 입출력 예는 링크를 참고해주세요.📝 선행 개념1. 정렬 정렬은 데이터를 특정 순서대로 나열하는 작업입니다. 이 문제에서는 바위의 위치를 오름차순으로 정렬해야 하므로 정렬 알고리즘에 대한 이해가 필요합니다. Java에서는 기본적으로 Arrays.sort() 메서드를 사용할 수 있습니다. 2. 이분 탐색 알고리즘이분 탐색은 정렬된 배열에서 특정 값을 찾거나, 특정 조건을 만족하는 값을 찾는 데 사용됩니다. 이 문제에서는 가능한 최소 거리의 최댓값을 찾기 위해 이분 탐색을 사용합니다.이분 탐색의 기본 원리: 정렬된 배열의 중간 값을 선택하고, 목표 값이 중간..

[프로그래머스][JAVA] 42895. N으로 표현

💡 문제N으로 표현 (https://school.programmers.co.kr/learn/courses/30/lessons/42895)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념동적 프로그래밍 (Dynamic Programming): 이 문제는 동적 프로그래밍의 접근 방식을 사용하여 해결됩니다. 동적 프로그래밍은 큰 문제를 작은 부분 문제로 나누어 해결하는 방법론으로, 각 부분 문제의 해결 방법을 저장하고 재활용함으로써 전체 문제를 해결합니다. 이러한 특성을 이용하여 중복 계산을 피하고 효율적인 알고리즘을 설계할 수 있습니다.최적 부분 구조 (Optimal Substructure): 이 문제는 최적 부분 구조를 가지고 있습니다. 즉, 주어진 문제를 작은 부분 문제로 나누어 해..

[프로그래머스][JAVA] 42861. 섬연결하기

💡 문제섬연결하기 (https://school.programmers.co.kr/learn/courses/30/lessons/42861)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념그래프 이론(Graph Theory):그래프는 정점(Vertex)과 간선(Edge)의 집합으로 이루어진 자료 구조입니다. 각 간선은 두 개의 정점을 연결하며, 방향이 있는 경우와 없는 경우로 나뉩니다.그래프는 방향성과 가중치가 있는 경우와 없는 경우로 구분됩니다. 이 문제에서는 방향성은 고려하지 않으며, 다리의 비용을 가중치로 취급합니다.최소 비용 신장 트리(Minimum Spanning Tree, MST):그래프의 모든 정점을 연결하는 트리 중에서, 간선의 가중치의 합이 최소인 트리를 의미합니다.이 때..

[프로그래머스][JAVA] 43163. 단어변환

💡 문제단어변환 (https://school.programmers.co.kr/learn/courses/30/lessons/43163)자세한 문제 설명과 입출력 예는 링크를 참고해주세요.📝 선행 개념🤓 문제 풀이🔨 문제 설명두 개의 단어 begin과 target, 그리고 단어의 집합 words가 주어집니다. begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾고자 합니다. 변환 과정은 다음과 같은 규칙을 따릅니다:한 번에 한 개의 알파벳만 바꿀 수 있습니다.변환 과정에서 항상 words에 있는 단어로만 변환할 수 있습니다.예를 들어, begin이 "hit", target이 "cog", words가 ["hot","dot","dog","lot","log","cog"]라면, "hit" -> ..

[프로그래머스][JAVA] 87694. 아이템 줍기

💡 문제아이템 줍기 (https://school.programmers.co.kr/learn/courses/30/lessons/87694)자세한 문제 설명과 입출력 예는 링크를 참고해주세요.📝 선행 개념이 문제를 해결하려면 주로 그래프 탐색 알고리즘과 2차원 배열을 다루는 방법을 이해해야 합니다. 아래는 문제를 푸는 데 필요한 주요 개념들입니다.1. BFS (Breadth-First Search)BFS는 그래프 또는 트리의 탐색 알고리즘 중 하나로, 너비 우선 탐색이라고도 합니다. BFS는 특정 노드에서 시작하여 인접한 모든 노드를 방문한 후, 방문한 노드를 기준으로 다시 인접한 노드들을 방문하는 방식으로 진행됩니다. BFS의 주요 특징은 다음과 같습니다:최단 경로 탐색: BFS는 최단 경로 문제를 해..

[프로그래머스][JAVA] 84512. 모음사전

💡 문제모음사전 (https://school.programmers.co.kr/learn/courses/30/lessons/84512)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념완전탐색 (Brute Force):- 가능한 모든 경우의 수를 탐색하여 해답을 찾는 방법입니다. 이 문제에서는 'A', 'E', 'I', 'O', 'U'라는 5개의 문자로 만들 수 있는 길이 1부터 5까지의 모든 단어를 생성해야 합니다. 이를 통해 사전의 모든 단어를 구할 수 있습니다. 재귀 함수 (Recursive Function):- 함수가 자기 자신을 호출하여 문제를 해결하는 방법입니다. 이 문제에서는 재귀 함수를 사용하여 길이 1부터 5까지의 모든 단어를 생성합니다. 예를 들어, 현재 단어가 "A"..

[JAVA] 문자열 처리, 배열과 반복문, 조건문, 수학적 계산 개념

아래와 같은 기본 개념들을 학습하고 연습하면, 복잡한 문제를 더 쉽게 해결할 수 있습니다. 문제를 해결하는 과정에서 수학적 패턴을 발견하고 이를 코드로 구현하는 능력을 기르는 것이 중요하다고 생각한다. 이를 위해 다양한 알고리즘 문제를 풀어보고, 여러 가지 접근 방식을 시도해보자 문자열 처리 문자열 처리 (String Manipulation)문자열을 다루는 방법을 익혀야 합니다. 문자열의 길이를 구하는 방법, 특정 위치의 문자를 가져오는 방법 등을 학습해야 합니다.예제: String.length(), String.charAt(int index)public class StringExample { public static void main(String[] args) { String word..

[프로그래머스][JAVA] 84021. 퍼즐조각채우기

💡 문제퍼즐조각채우기(https://school.programmers.co.kr/learn/courses/30/lessons/84021)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념🤓 문제 풀이문제 설명주어진 문제는 게임 보드의 빈 공간에 테이블 위의 퍼즐 조각을 적절히 놓아서 최대한 많은 칸을 채우는 것입니다. 퍼즐 조각을 회전시킬 수는 있지만 뒤집을 수는 없습니다. 각 퍼즐 조각은 인접한 칸이 비어있으면 안 됩니다.문제 접근 방법퍼즐 조각 추출:BFS를 사용하여 테이블에서 퍼즐 조각을 추출합니다.퍼즐 조각을 추출할 때, 모든 가능한 회전을 고려하여 저장합니다.빈 공간 추출:BFS를 사용하여 게임 보드에서 빈 공간을 추출합니다.퍼즐 조각 맞추기:각 빈 공간에 대해 모든 퍼즐 ..

[프로그래머스][JAVA] 84512. 모음사전

💡 문제모음사전 (https://school.programmers.co.kr/learn/courses/30/lessons/84512)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념 🤓 문제 풀이이 문제는 완전탐색을 사용하여 각 자리수의 알파벳에 대한 가중치를 계산하여, 주어진 단어의 사전 순서를 찾아냅니다. 사전에 길이 5 이하의 모든 단어를 만들 수 있는 알파벳 모음 'A', 'E', 'I', 'O', 'U'가 사용된다고 합니다. 이 단어들을 사전 순서대로 배열했을 때, 주어진 단어 **word**가 몇 번째에 위치하는지 찾는 문제입니다. 이를 해결하기 위해 완전탐색을 사용합니다. 이를 통해 주어진 단어가 몇 번째 단어인지 효율적으로 찾을 수 있습니다.완전탐색을 위해서는 각 위..

[리트코드][JAVA] 899. orderly-queue (정렬된 큐)

💡 문제orderly-queue (https://leetcode.com/problems/orderly-queue/description/)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념시간 복잡도:k == 1: O(n^2)k >= 2: O(n log n)공간 복잡도:k == 1: O(n)k >= 2: O(n)🤓 문제 풀이문제 번역문자열 s와 정수 k가 주어집니다. s의 처음 k개의 문자 중 하나를 선택하여 문자열 끝에 추가할 수 있습니다. 주어진 단계를 여러 번 적용한 후 얻을 수 있는 사전 순으로 가장 작은 문자열을 반환하세요. 예시 1:입력: s = "cba", k = 1출력: "acb"설명:첫 번째 , 첫 번째 문자 'c'를 끝으로 이동하여 문자열 "bac"를 얻습니다.두 번..

[리트코드][JAVA] 2551. Put Marbles in Bags (구슬을 가방에 담다)

💡 문제Put Marbles in Bags (https://leetcode.com/problems/put-marbles-in-bags/description/)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념 🤓 문제 풀이문제 해석:1- 주어진 배열 weights에는 각 구슬의 무게가 저장되어 있습니다. 또한 정수 k가 주어집니다. 이 배열에서 k개의 가방에 구슬을 다음 규칙에 따라 나누려고 합니다:어떤 가방도 비어 있지 않아야 합니다.i번째 구슬과 j번째 구슬이 같은 가방에 있다면, i부터 j번째 인덱스에 있는 모든 구슬도 같은 가방에 있어야 합니다.한 가방에 속한 구슬의 인덱스 범위가 i부터 j이면, 해당 가방의 비용은 weights[i] + weights[j]입니다.구슬을 배분..

[프로그래머스][JAVA] 이중 우선순위 큐

💡 문제이중우선순위큐 (https://school.programmers.co.kr/learn/courses/30/lessons/42628)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념이중 우선순위 큐는 최댓값과 최솟값을 모두 효율적으로 처리할 수 있는 자료구조 Collections.reverseOrder()Collections.reverseOrder()는 Java의 Collections 클래스에서 제공하는 정적 메서드로, 기본 정렬 순서를 반대로 하는 데 사용됩니다. 이 메서드는 Comparator 객체를 반환하며, 이 객체를 사용하여 컬렉션을 내림차순으로 정렬할 수 있습니다. 이는 기본 데이터 타입뿐만 아니라 커스텀 객체에도 적용할 수 있으며, Comparable 인터페이스를 ..

[프로그래머스][JAVA] 디스크 컨트롤러

💡 문제챌린저: 디스크 컨트롤러 (https://school.programmers.co.kr/learn/courses/30/lessons/42627)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념힙(Heap) 이란힙(Heap)은 완전 이진 트리의 일종으로, 특정한 조건을 만족하는 자료구조입니다. 힙은 다음 두 가지 유형이 있습니다최대 힙(Max Heap): 부모 노드의 값이 항상 자식 노드의 값보다 크거나 같은 힙. 따라서 루트 노드의 값이 가장 큽니다.최소 힙(Min Heap): 부모 노드의 값이 항상 자식 노드의 값보다 작거나 같은 힙. 따라서 루트 노드의 값이 가장 작습니다.힙의 특성 덕분에 힙은 우선순위 큐(Priority Queue)를 구현하는 데 사용됩니다. 우선순위 큐..

[프로그래머스][JAVA] 다리를 지나는 트럭

💡 문제 다리를 지나는 트럭 (https://school.programmers.co.kr/learn/courses/30/lessons/42583) 자세한 문제 설명과 입출력 예는 링크를 참고해주세요.📝 선행 개념큐(Queue)는 컴퓨터 과학에서 사용하는 자료 구조 중 하나로, 먼저 들어온 데이터가 먼저 나가는 FIFO(First In First Out) 원칙을 따릅니다. 큐는 일상생활에서 줄을 서서 차례를 기다리는 상황을 생각하면 이해하기 쉽습니다. 예를 들어, 사람들은 줄의 맨 앞에서 차례를 기다리며, 새로 온 사람들은 줄의 맨 뒤에 서게 됩니다.큐의 기본 동작삽입(Enqueue): 요소를 큐의 뒤쪽에 추가합니다.삭제(Dequeue): 요소를 큐의 앞쪽에서 제거합니다.확인(Peek or Front)..

[백준][JAVA] 비슷한 단어

💡 문제 비슷한 단어 (https://www.acmicpc.net/problem/2179)자세한 문제 설명과 입출력 예는 링크를 참고해주세요.📝 선행 개념주어진 문제를 해결하기 위해 다양한 자료 구조와 알고리즘을 사용할 수 있다.해당 문제에서는 해시맵(HashMap)과 배열을 사용하여 문제를 해결하였으며 아래는 해당 문제를 해결하는 데 사용된 자료 구조와 알고리즘에 대한 설명입니다. 자료 구조해시맵 (HashMap): 단어를 키로, 해당 단어의 입력 순서를 값으로 저장합니다. 이를 통해 단어의 입력 순서를 기억할 수 있습니다.배열 : 입력된 단어들을 저장합니다. 이를 통해 단어 쌍을 비교할 수 있습니다.알고리즘문자열 비교:각 단어 쌍에 대해 최대 접두사 길이를 계산합니다.이중 반복문 (Nested L..

[프로그래머스][JAVA] 베스트앨범

💡 문제베스트앨범 (https://school.programmers.co.kr/learn/courses/30/lessons/42579)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념1. Comparable 인터페이스public interface Comparable { public int compareTo(T o);}이 메서드는 현재 객체와 지정된 객체를 비교하여 다음과 같은 값을 반환해야 합니다2. Collections.sortCollections.sort 메서드는 Java의 Collections 클래스에 정의된 정적 메서드로, 리스트를 정렬할 때 사용됩니다. Comparable 인터페이스를 구현한 객체들의 리스트를 정렬할 때 유용합니다.List songs = new Arra..