2020/11
나의 풀이 해당 문제는 participant의 최대가 100,000으로 O(n^2)이상의 시간 복잡도가 나오면 안되는 문제이다. 필자는 딕셔너리를 이용하여 풀이를 하였다. 우선, participant의 모든 선수들을 반복하며 {이름: 개수} 형태로 저장하고 각 선수의 숫자를 세어준다. 이후 completion을 반복하며 해당하는 이름의 숫자를 1씩 감소를 시킨다. 그리고 마지막으로 딕셔너리를 반복하며 value가 0이 아니라면 return을 해주면 문제를 해결할 수 있다. 허나 다른 사람의 풀이를 보니 유용한 모듈이 있어 글을 쓰게 되었다. collections에 보면 Counter라는 오브젝트가 있다. 이 오브젝트는 리스트에 있는 요소들의 개수를 자동으로 딕셔너리 형태로 갖는다. 예를 들면, ['..
해당 문제는 2019 카카오 개발자 겨울 인턴십에서 1번으로 나왔던 문제이다. 나의 풀이 필자는 board가 2차원 배열로 주어진 것을 collum별로 스택에 나누어 담아 놓고 크레인이 움직일 때 2차원 배열을 반복하며 찾는 과정을 없애는 방향으로 풀이를 진행하였다. 따라서 초기에 N개 만큼의 deque()를 담는 list를 만들어두고 board의 모든 행을 거꾸로 탐색하여 해당 deque()에 0이 아니라면 append를 해놓았다. 또한, bucket이라는 deque()도 생성해두었다. 이후, 주어지는 moves를 반복하며 해당하는 deque()가 비어있지 않다면 pop을 하였다. 그리고나서 bucket이 비어있지 않다면 가장 위에 있는 인형과 같은지를 비교하고 같다면 bucket에서 pop을 진행하고..
JVM의 전체적인 구조를 그려보면 해당 그림과 같다. 클래스 로더 클래스 로더는 바이트 코드(.class)를 읽고 메모리의 적절한 위치에 저장한다. 클래스 로더의 구조를 좀 더 자세히 그려보면 다음과 같다. 클래스 로더는 크게 로딩, 링크, 초기화 순으로 진행이 된다. 각 과정들에 대하여 간단히 정리해보았다. 로딩 .class 파일을 읽고 적절한 바이너리 데이터를 만들고 메소드 영역에 저장을 한다. 이때 메소드 영역에 저장하는 데이터는 다음과 같다. FQCN (Fully Qualified Class Name) : 패키지명까지 포함되어 있는 식별자이다. Class, Interface, Enum의 종류 해당 클래스의 메소드와 변수 이러한 로딩 과정이 끝나면 해당 클래스 타입의 Class 객체(Class 의 ..
처음 자바를 접할때 JDK, JRE가 뭐가 다른지부터 헛갈렸던 기억이 있다. 이번 글에서 이러한 용어에 대한 차이를 알아보고자 한다. Java 자바는 프로그래밍 언어로 JDK에 들어있는 자바 컴파일러를 통해 .class(바이트 코드)파일로 컴파일 할 수 있다. 또한, JVM을 통해 Wirte Once Run Anywhere로 Java 언어 자체는 플랫폼에 독립적이다. java 바이트 코드 $ javap -c Hello.class Compiled from "Hello.java" public class Hello { public Hello(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."":()V 4: return public stat..
문제 에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다. 이 알고리즘은 다음과 같다. 2부터 N까지 모든 정수를 적는다. 아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다. P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다. 아직 모든 수를 지우지 않았다면, 다시 2번 단계로 간다. N, K가 주어졌을 때, K번째 지우는 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ K < N, max(2, K) < N ≤ 1000) 출력 첫째 줄에 K번째 지워진 수를 출력한다. 예제 입력 1 10 7예제 출력 1 9 나의 풀이 해당 문제는 구현 문제로 1,2,3,4번에 해당하는 로직을 코드로 짜주면 ..