Java

문제 접근 방식 한 자리의 경우 : 1 두 자리의 경우 : 11, 00 세 자리의 경우 : 111, 100, 001 네 자리의 경우 : 1111, 1100, 1001, 0011, 0000 다섯 자리의 경우 : 11111, 11100, 11001, 10011, 10000, 00111, 00100, 00001 각 자릿수 별로 경우의 수를 적어보면 위와 같다. 우리가 사용할 수 있는 숫자는 한 자리인 1과 두 자리인 00 두 가지만 있는데 만약 여섯 자리의 수를 만들어야 한다 가정하면 첫자리에 1이 오면 그 뒤에는 다섯 자리의 수가 올 수 있을 테니 기존에 구해둔 다섯 자리의 경우만큼 만들 수 있을 것이고 첫자리에 00이 오면 그 뒤에는 네 자리의 수가 올 수 있으니 기존에 구해둔 네 자리의 경우만큼 만들 수..
문제 접근 방식 가장 낮은 값과 (다음으로 낮은 값 * 2)을 더한 값을 다시 포함하여 모든 수가 K 이상이 되게 만들어야 한다. 즉, 가장 낮은 값 두 개를 뺀 후에 섞고 다시 섞은 것을 추가해야 하고 이 때, 항상 정렬된 상태를 유지해야 하는게 중요하다. 섞은 것을 추가할 때마다 정렬을 하기에는 시간 복잡도가 비효율적이기 때문에 값이 추가되어도 항상 정렬된 상태를 유지할 수 있는 우선순위 큐를 사용하면 쉽다. 처음에는 우선순위 큐에 모든 값들을 넣어주고 큐에서 가장 작은 값을 두 개씩 빼가며 섞어주고 다시 넣어주다가 꺼낸 값이 K 이상이라면 이후의 값들도 당연히 K 이상이기 때문에 현재까지의 카운트를 리턴해주면 되고 값을 하나 꺼냈는데 더 이상 남은 것이 없다면 더 이상 섞을 것이 없기 때문에 모든 ..
· Java/Notion
자바의 하위 호환성 자바는 이전 버전이 상위 버전의 JVM에서 동작이 보장되지만 상위 버전의 기능을 하위 버전의 JVM에서 컴파일 할 수는 없다. 즉, 8버전의 기능을 17버전에서 구동할 수는 있어도 17버전에만 있는 기능을 8버전에서 구동할 수는 없다. JDK 1.1 Inner Class JavaBeans (자바로 작성된 소프트웨어 컴포넌트) Remote Method Invocation (분산 애플리케이션 구축 시 사용되며 java.rmi 패키지에 제공된다) Reflection J2SE 1.2 Swing GUI JIT Collection Framework J2SE 1.3 Hotspot JVM Java Naming and Directory Interface (데이터 및 객체를 발견하고 참고하기 위해 사용..
· Java/Notion
Warm Up을 알아보기 전에 Warm Up이 필요한 이유에 대해 알아보겠다. 서버 배포 직후의 Latency 발생 서버 배포 직후 사용자가 요청을 보냈을 때 유독 응답이 느린 문제가 발생한다. 이러한 문제가 발생하는 원인은 크게 두 가지가 있는데 바로 클래스 로더의 지연 로딩과 JIT 컴파일러의 동작 방식 때문이다. 클래스 로더의 지연 로딩 클래스 로더는 클래스 파일을 찾아 메모리에 적재해 실행 가능하게 만들어주는데 이러한 동작을 자바 애플리케이션이 시작될 때 모두 메모리에 적재하는 것이 아니라 각 클래스들이 직접적으로 필요한 시점에 로딩을 하는 지연 로딩 방식을 사용한다. 즉, 서버 배포 직후에 사용자가 요청을 보내면 해당 요청을 처리하기 위해 필요한 클래스들은 당연히 아직 메모리에 적재가 되지 않은..
· Java/Notion
Garbage Collection JVM의 Heap 영역 내에서 동적으로 할당했던 메모리 중 더 이상 사용하지 않는 메모리 객체들을 모아 주기적으로 자동으로 제거해주는 하나의 프로세스 개발자가 메모리를 직접 할당하고 해제하는 일에 신경을 쓸 필요가 없어져 개발에만 집중할 수 있게 해준다. GC는 만능일까? 세상에 완벽한 것은 없기 때문에 당연히 단점이 존재한다. 우선 GC는 개발자가 제어할 수 있는 영역이 아니기 때문에 GC가 메모리를 언제 해제하는지 알 수 없으며, GC가 동작하는 동안 관련 쓰레드를 제외한 모든 쓰레드가 멈추기(Stop The World) 때문에 오버헤드가 발생한다. 이런 STW 현상은 GC가 과하게 실행된다면 성능 하락으로 이어질 수도 있기 때문에 효율적으로 GC를 실행할 수 있게 ..
· Java/Notion
개요 우선 JVM 자체가 OS 위에서 자바 프로그램을 실행시켜 주는 역할을 수행해 운영체제에 독립적으로 실행할 수 있게 된다는 것은 당연히 알지만 JVM의 구성, 동작원리, 장단점 등에 대해 깊게 정리해보고자 한다. 컴파일 타입 환경에서의 자바 컴파일러 우리가 작성한 원시코드로 이루어진 java 파일은 JVM이 인식할 수 없기 때문에 자바 컴파일러가 java 파일을 자바 바이트코드로 이루어진 class 파일로 변환한다. (java파일 > 어휘 분석 > 구문 분석 > 의미 분석 > 중간 코드 생성 후 최적화 = class 파일) 실제로 프로그램을 실행한 후에 java 파일들과 이름은 같지만 확장자가 다른 class 파일이 생성된 것을 확인할 수 있다. cmd 창에서 직접 컴파일을 해봤으면 알 수도 있는데 ..
문제 접근 방식 별 찍기 문제들은 재귀 처음 배울 때 너무 싫어했던 기억이 있어서 풀기 싫었는데 스트릭 유지할겸 오랜만에 재귀 문제를 풀어보았다. 정사각형이 점점 작아지는 형태로 예를 들면 가장 밖의 정사각형이 13 * 13이라면 그 안의 사각형은 상하좌우 한 칸 거리를 두고 9 * 9 그 안의 사각형도 상하좌우 한 칸 거리를 두고 5 * 5 마지막은 1 * 1이 된다. 규칙을 찾아보면 사각형의 가로세로 길이가 4씩 줄어드는 것을 알 수 있는데 재귀를 호출할 때마다 x축과 y축을 4씩 늘리거나 줄여주면서 2차원 문자 배열에 별을 저장한 후에 모두 끝나면 배열을 출력해주면 된다. 풀이 public class Main { private static char[][] stars; public static voi..
문제 접근 방식 문제에 적힌거처럼 위 함수를 그대로 구현하고 15, 15, 15 이상의 값들을 넘겨주면 재귀의 깊이가 너무 깊어져 시간 초과가 발생한다. 중복된 호출을 계속해서 반복하기 때문인데 이러한 문제를 해결하기 위해서는 간단하게 중복된 호출을 하지 않으면 되고 이를 해결하는 방법은 DP와 메모이제이션이 있고 이번에는 메모이제이션을 사용해서 풀어보겠다. 우선 입력의 범위가 -50부터 50까지이기 때문에 배열을 101칸 만들고 50씩 더해서 인덱스를 계산해줄까 생각했는데 문제의 코드를 보고 나니 어차피 1이상 20이하까지만 계산하기 때문에 그 외의 값들을 처리해줄 필요가 없다. 그래서 계산 결과를 처리해줄 3차원 배열을 각 21칸씩 만들어 a, b, c의 경우의 수마다 값을 저장해주면 된다. 이후 함..
da9dac
'Java' 카테고리의 글 목록 (6 Page)