본문 바로가기

전체 글70

[JAVA] Reflection 1. Java Reflection, 자바 리플렉션이란 자바 리플렉션(Java Reflection)은 자바 언어에서 실행 중인 코드의 클래스, 인터페이스, 메서드, 필드 등의 정보를 동적으로 가져올 수 있는 기능이다 이를 통해 프로그래머는 컴파일 시간이 아닌 런타임 시간에 객체의 정보를 가져와서 인스턴스를 생성하는 등 다양한 작업을 수행할 수 있다 예를 들어, 자바 애플리케이션에서는 클래스 이름을 알고 있지만, 해당 클래스가 어떤 메서드나 필드를 가지고 있는지 알 수 없는 경우가 많다. 이런 경우 리플렉션을 사용하여 클래스의 정보를 동적으로 가져와서 필요한 작업을 수행할 수 있다 2. 리플렉션을 이용해 클래스를 가져오는 방법 // 클래스 객체 생성 Class testClass = Class.forName(.. 2023. 3. 23.
[JAVA] Atomic Atomic이란? 두 스레드가 동시에 돌아가는 멀티스레드 환경에서 각 스레드가 하나의 변수를 동시에 increment하게되면 어떻게 될까? (상수라면 final 변수로 초기화 하면 된다) 예상치 못한 결과를 막기위해 동시성 문제를 해결해야만 하고 스레드 간의 변수를 안전하게 공유하고 동기화 시켜야 한다 Java에서는 Atomic 클래스를 이용해 멀티스레드 환경에서 안전하게 변수를 조작할 수 있다 Atomic 클래스는 다음과 같은 특징을 갖는다 동기화 문제를 해결하기 위한 클래스 멀티스레드 환경에서 안전하게 변수를 조작할 수 있도록 함 기본 자료형(int, long, double 등)과 참조 자료형(객체)에 대한 클래스가 제공됨 원자성(Atomicity), 일관성(Consistency), 공유 가능성(Vi.. 2023. 3. 21.
[JAVA/백준/1495] 기타리스트 / DP 1495번: 기타리스트 첫째 줄에 N, S, M이 주어진다. (1 ≤ N ≤ 50, 1 ≤ M ≤ 1,000, 0 ≤ S ≤ M) 둘째 줄에는 각 곡이 시작하기 전에 줄 수 있는 볼륨의 차이가 주어진다. 이 값은 1보다 크거나 같고, M보다 작거나 같다. www.acmicpc.net 풀이 과정 기타의 볼륨을 조절하여 연주할 수 있는 곡 중에서, 마지막 곡을 연주할 때 볼륨의 최댓값을 구하는 문제다 이 문제를 해결하기 위해서는 가능한 모든 볼륨을 조합해봐야 하며 시간과 메모리를 적게 소모하기 위해서는 동적 계획법(Dynamic Programming)을 사용할 수 있다 우선 입력값을 받아와서, 가능한 볼륨을 저장하는 배열인 dp를 초기화한다 그리고 첫번째 곡을 연주할 때, 현재 볼륨(S)을 인덱스로 가지는 .. 2023. 3. 20.
[JAVA/백준/16400] 소수 화폐 / DP 16400번: 소수 화폐 구매하려고하는 물건의 값 N(2 ≤ N ≤ 40,000, N은 정수)이 주어진다. www.acmicpc.net 풀이 과정 처음엔 모든 경우의 수를 따져가며 규칙을 찾았다 2 = 2 3 = 3 4 = 2 + 2 5 = 2 + 3, 5 6 = 2 + 2 + 2, 3 + 3 7 = 2 + 2 + 3, 2 + 5, 7 8 = 2 + 2 + 2 + 2, 2 + 3 + 3, 3 + 5 현재 수에서 소수만큼을 뺀 경우의 수를 모두 더하면 될 것 처럼 생겼다 우선 에라토스테네스의 체를 만들어 소수를 뽑았다 그 후 dp 배열을 만들고 dp[0] = 1을 넣은 다음에 점화식을 다음과 같이 유도했다 case 2 dp[2] += dp[2 - 2] dp[3] += dp[3 - 2] dp[4] += dp.. 2023. 3. 15.
[JAVA/백준/16236] 아기상어 / BFS 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 풀이 과정 이 문제는 BFS를 구현하면 되는 문제지만 조건이 매우 복잡하다 이동 조건은 다음과 같다 먹을 수 있는 물고기가 1마리라면, 그 물고기를 먹으러 감 먹을 수 있는 물고기가 1마리보다 많다면, 다음 우선 순위로 먹으러 감 거리가 가까운 순서 위, 왼쪽으로 가까운 순서 더 이상 먹을 수 있는 물고기가 공간에 없다면 종료 상어의 이동은 1초가 걸림 상어는 자신의 크기만큼 물고기를 먹으면 크기가 1 커짐 위 조건들을 맞추면서 BFS 탐색을 해야한다 하나.. 2023. 1. 5.
[JAVA] 문자열에서 숫자만 추출하기 / StringTokenizer, Split [1,2,3,4,5]라는 문자열이 주어진다 이 문자열에서 숫자만 추출해 하나의 int 배열로 만들고 싶을 경우 어떻게 할까? 1. StringTokenizer StringTokenizer st = new StringTokenizer(string, "[],"); stringTokenizer를 이용하는 방법이다 StringTokenizer는 첫 번째 인자로 토큰으로 나눌 문자열 두 번째 인자로 토큰으로 나눌 기준을 받는다 나눌 기준은 " " 안에 들어있는 문자들이 기준이 된다 위 코드에서는 '[' ']' ',' 세 개가 문자열에 있으면 그 것을 기준으로 토큰을 나눈다 2. Split + \\ (정규식) String[] arr = string.split("[\\[\\]\\,]"); split을 이용한다 spl.. 2023. 1. 2.