전체 글69 [Java] static 알아보기 1. static이란 static 멤버란 정적 멤버를 뜻합니다. 클래스 멤버라고도 부르는 static 멤버는 어떤 객체 소속이 아닌, 클래스에 고정되어 있는 변수나 메서드라는 것을 의미합니다. static 키워드를 통해 생성된 정적 멤버들은 Heap 영역이 아닌 Static 영역에 할당되며, 그렇기 때문에 가비지 컬렉터의 관리 영역 밖에 존재합니다. 프로그램이 시작할 때 메모리에 적재되어서 모든 객체가 공유하여 사용할 수 있다는 장점이 있지만, 프로그램이 시작할 때 생성되어 프로그램이 끝날 때까지 값이 유지되므로 static 멤버를 지나치게 남용하는 것은 시스템 성능에 악영향을 줄 수도 있습니다. 2. static의 특징 (1) 메모리에 고정적으로 할당된다. static이 붙지 않은 메서드나 변수는 객체.. Java 2024. 4. 22. 순열(Permutation) (+Java 코드) 1. 순열(Permutation)이란 순열은 n개의 숫자 중에서 r개를 뽑아야 할 때 순서를 고려해서 뽑는 것을 말합니다. 순서에 따라 결과가 달라지기 때문에 같은 1,2,3 데이터를 사용하더라도 은 모두 다른 결과로 취급하게 됩니다. 2. 구현 방법 그렇다면 순열은 코드 상에서 어떻게 구현할 수 있을까요? (1) depth 변수 사용 depth 변수를 통해 깊이를 이동하며 데이터를 뽑는 방식입니다. depth 변수는 result 배열의 index를 의미하며 현재 뽑고자 하는 데이터의 위치라고 생각해 주시면 됩니다! depth가 0일 때에는 result[0]의 숫자를 결정합니다. visited 배열을 통해 아직 사용하지 않은 데이터가 있다면 그 데이터들은 모두 result[0]의 후보가 될 수 있습니다... Algorithm & Data Structure/이론 2024. 4. 22. [백준] 1759번 암호 만들기 (Java) 0. 출처 백준 1759번 문제입니다. 1. 문제 바로 어제 최백준 조교가 방 열쇠를 주머니에 넣은 채 깜빡하고 서울로 가 버리는 황당한 상황에 직면한 조교들은, 702호에 새로운 보안 시스템을 설치하기로 하였다. 이 보안 시스템은 열쇠가 아닌 암호로 동작하게 되어 있는 시스템이다. 암호는 서로 다른 L개의 알파벳 소문자들로 구성되며 최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음으로 구성되어 있다고 알려져 있다. 또한 정렬된 문자열을 선호하는 조교들의 성향으로 미루어 보아 암호를 이루는 알파벳이 암호에서 증가하는 순서로 배열되었을 것이라고 추측된다. 즉, abc는 가능성이 있는 암호이지만 bac는 그렇지 않다. 새 보안 시스템에서 조교들이 암호로 사용했을 법한 문자의 종류는 C가지가.. Algorithm & Data Structure/코딩 테스트 문제풀이 2024. 4. 22. 조합(Combination) (+Java 코드) 1. 조합(Combination)이란 조합은 n개의 숫자 중에서 r개를 뽑아야 할 때 순서를 고려하지 않고 뽑는 것을 말합니다. 2. 구현 방법 그렇다면 이 조합은 코드 상에서 어떻게 구현할 수 있을까요? 가장 중요한 포인트는 해당 인덱스의 숫자를 선택하냐, 안하냐의 두 가지가 경우가 존재한다는 것입니다! (1) 백트래킹 백트래킹을 사용해서 조합을 구현할 때에는 start 변수를 사용합니다. start 변수는 인덱스를 표현하는데요. arr[start]의 값을 선택하든지, 선택하지 않든지 두 가지 경우가 생기게 됩니다. 선택하면 visited[start] = true 가 되고 선택하지 않으면 visited[start] = false가 되며 선택한 경우에는 start를 +1 증가시켜서 다음 숫자를 고르면 됩.. Algorithm & Data Structure/이론 2024. 4. 22. [백준] 2529번 부등호 (Java) 0. 출처 백준 2529번 문제입니다. 1. 문제 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시된 부등호 순서열 A가 다음과 같다고 하자. A ⇒ 부등호 기호 앞뒤에 넣을 수 있는 숫자는 0부터 9까지의 정수이며 선택된 숫자는 모두 달라야 한다. 아래는 부등호 순서열 A를 만족시키는 한 예이다. 3 1 7 0 이 상황에서 부등호 기호를 제거한 뒤, 숫자를 모두 붙이면 하나의 수를 만들 수 있는데 이 수를 주어진 부등호 관계를 만족시키는 정수라고 한다. 그런데 주어진 부등호 관계를 만.. Algorithm & Data Structure/코딩 테스트 문제풀이 2024. 4. 21. [백준] 1347번 미로 만들기 (Java) 0. 출처 백준 1347번 문제입니다. 1. 문제 홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍준이는 미로에서 모든 행과 열의 이동할 수 있는 칸을 걸어다녔다. 그러면서 자신의 움직임을 모두 노트에 쓰기로 했다. 홍준이는 미로의 지도를 자기 노트만을 이용해서 그리려고 한다. 입력으로 홍준이가 적은 내용을 나타내는 문자열이 주어진다. 각 문자 하나는 한 번의 움직임을 말한다. ‘F’는 앞으로 한 칸 움직인 것이고, ‘L'과 ’R'은 방향을 왼쪽 또는 오른쪽으로 전환한 것이다. 즉, 90도를 회전하면서, 위치는 그대로인 것이다. (1) 입력 첫째 줄에 홍준이가 .. Algorithm & Data Structure/코딩 테스트 문제풀이 2024. 4. 19. [백준] 1916번 최소비용 구하기 (Java) 0. 출처 백준 1916번 문제입니다. 1. 문제 N개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 M개의 버스가 있다. 우리는 A번째 도시에서 B번째 도시까지 가는데 드는 버스 비용을 최소화 시키려고 한다. A번째 도시에서 B번째 도시까지 가는데 드는 최소비용을 출력하여라. 도시의 번호는 1부터 N까지이다. (1) 입력 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 그리고 그 다음에는 도착지의 도시 번호가 주어지고 또 그 버스 비용이 주어진다. 버스 비용은 0보다 크거나.. Algorithm & Data Structure/코딩 테스트 문제풀이 2024. 4. 18. 다익스트라(dijkstra) 알고리즘 (+Java 코드) 1. 다익스트라란? 다익스트라 알고리즘은 최단 거리를 구하는 알고리즘입니다. (1) 조건 다익스트라 알고리즘을 사용하여 문제를 풀기 위해서는 조건이 있습니다. 음수 가중치가 없어야 한다. 음수 가중치가 있는 그래프에서 최단 거리를 구하기 위해서는 벨만-포드 알고리즘을 사용하면 됩니다! 2. 다익스트라 알고리즘 방식 그렇다면 어떻게 그래프의 최단 거리를 구하는걸까요? 아직 방문하지 않은 정점 중 출발지로부터 가장 가까운 정점을 방문합니다. -> 우선순위 큐 해당 정점을 거쳐 갈 수 있는 정점의 거리가 이전 기록한 값보다 작으면 갱신합니다. (1)번 과정에서 출발지로부터 가장 가까운 정점을 방문해야 하기 때문에 구현할 때에는 우선순위 큐를 사용합니다. 예시를 통해 알아봅시다. (0) 예시 그래프 (1) 출발.. Algorithm & Data Structure/이론 2024. 4. 18. [Java] 래퍼 클래스(Wrapper Class)란 1. 래퍼 클래스(Wrapper Class)란 래퍼 클래스란 자바에서 기본 자료타입을 객체로 다루기 위해 사용하는 클래스입니다. 자바는 크게 기본 타입(Primitive Type)과 참조 타입(Reference Type)의 자료형을 가지고 있습니다. 대표적인 기본 타입으로는 int, float, double, char, boolean 등이 있는데요! 개발을 하다보면 종종 기본 타입 데이터를 객체로 표현해야 하는 경우가 있습니다. (저는 코딩 테스트를 풀 때 가장 많이 사용하는 것 같습니다..) 이때 래퍼 클래스가 사용됩니다! 2. 래퍼 클래스의 종류 자바의 모든 기본 타입은 객체 형태로 표현할 수 있으며, 타입명이 비슷하기 때문에 쉽게 알고 사용할 수 있습니다! 기본 타입 (Primitive Type) .. Java 2024. 4. 18. [백준] 2157번 여행 (Java) 0. 출처 백준 2157번 문제입니다. 1. 문제 N개의 도시가 동쪽에서 서쪽으로 순서대로 위치해 있다. 제일 동쪽에 있는 도시는 1번 도시이며, 제일 서쪽에 있는 도시는 N번 도시이다. 당신은 이와 같은 도시 중에서 M개 이하의 도시를 지나는 여행을 계획하려 한다. 여행 경로는 반드시 1번 도시에서 시작해서 N번 도시에서 끝나야 한다. 물론 이 두 도시도 M개의 도시에 포함된다. 당신은 시차에 매우 민감하기 때문에, 한 번 서쪽으로 이동했다가 다시 동쪽으로 이동하면 몸이 대단히 아프다. 그래서 당신은 계속 서쪽으로만, 즉 도시 번호가 증가하는 순서대로만 이동하기로 하였다. 한편, 모든 도시에서 다른 모든 도시로 이동할 수 있는 건 아니다. 각각의 도시에서 다른 도시로 이동할 때에는 비행기를 타고 이동해.. Algorithm & Data Structure/코딩 테스트 문제풀이 2024. 4. 17. [Java] JVM GC 처리 과정 1. GC란 Garbage Collection의 약자인 GC는 JVM에서 제공하는 메모리 관리 기능입니다. Runtime Data Area의 Heap 영역에 저장된 객체들을 따로 정리하지 않으면, 메모리가 가득차 에러가 발생할 수 있습니다. 이를 방지하고자 JVM에서는 GC를 통해 메모리를 관리해 주며, 이 덕분에 개발자는 편하게 프로그래밍을 할 수 있습니다! (개발자들은 어느 시점에 GC가 동작하는지 모릅니다. 언제 역할을 수행하는지는 모르지만.. 늘 고마워 GC..) Java에서 System.gc()를 직접 호출할 수도 있지만.. 해당 메소드를 호출하는 것은 시스템의 성능에 매우 큰 영향을 미치므로 절대 호출해서는 안됩니다! 2. Java에 GC 도입이 가능했던 이유 Java는 weak generat.. Java 2024. 4. 16. [백준] 2302번 극장 좌석 (Java) 0. 출처 백준 2302번 문제입니다. 1. 문제 어떤 극장의 좌석은 한 줄로 되어 있으며 왼쪽부터 차례대로 1번부터 N번까지 번호가 매겨져 있다. 공연을 보러 온 사람들은 자기의 입장권에 표시되어 있는 좌석에 앉아야 한다. 예를 들어서, 입장권에 5번이 쓰여 있으면 5번 좌석에 앉아야 한다. 단, 자기의 바로 왼쪽 좌석 또는 바로 오른쪽 좌석으로는 자리를 옮길 수 있다. 예를 들어서, 7번 입장권을 가진 사람은 7번 좌석은 물론이고, 6번 좌석이나 8번 좌석에도 앉을 수 있다. 그러나 5번 좌석이나 9번 좌석에는 앉을 수 없다. 그런데 이 극장에는 “VIP 회원”들이 있다. 이 사람들은 반드시 자기 좌석에만 앉아야 하며 옆 좌석으로 자리를 옮길 수 없다. 오늘 공연은 입장권이 매진되어 1번 좌석부터 N.. Algorithm & Data Structure/코딩 테스트 문제풀이 2024. 4. 16. 이전 1 2 3 4 5 6 다음