본문 바로가기

전체 글

(276)
이코테 - 공유기 설치 with JAVA 해결 이 문제를 해결하기 위해서는 공유기 설치 간격을 이분탐색으로 구하면 된다. 즉, 공유기 설치 간격을 정해서 입력받은 공유기의 수보다 공유기를 설치 못한다면 공유기 설치 간격을 줄이고 반대로, 입력받은 공유기 수와 같거나 더 많이 설치 가능하다면 공유기 설치 간격을 늘려가며 이분탐색을 진행한다. 예를 들어, 집은 1, 2, 4, 8, 9 에 위치하고 공유기는 3개를 설치하고 싶다고 가정하자. 집간 최소 간격은 1이고 최대 간격은 8이다. 따라서 start=1, end=8로 설정한다. 첫번째 mid= 4가 되고 이는 공유기 설치 간격은 4가 되는 것이다. 위 집들에 적용하면 1, 8에 설치 가능하다. 이는 공유기 3개보다 적으므로 설치 간격을 줄인다. 두번째로는 start=1, mid=2, end=3 ..
이코테 - 정렬된 배열에서 특정 수의 개수 구하기 풀이 1. 기본적으로는 이진탐색이 배경이 된다. (찾고자 하는 값보다 현재 값이 작다면 start = mid+1, 반대는 end = mid-1) 2. 첫번째 인덱스 찾기 - 현재 인덱스가 0이거나 현재인덱스 -1 에 해당하는 값이 찾고자하는 값보다 작고 현재 인덱스에 해당하는 값이 찾고자하는 값일 때, 종료 - 현재 인덱스의 값이 찾고자하는 값보다 작다면 start = mid+1 - 현재 인덱스의 값이 찾고자하는 값보다 크거나 같다면 end = mid-1 예를들어, 1 2 2 2 2 2 3 이 있고 mid는 3이다. 찾고자하는 것은 2의 시작점이다. 인덱스 3에 해당하는 값은 2이다. 해당 인덱스는 0도 아니고 해당 인덱스의 전값이 2보다 작지도 않으므로 첫번째 조건은 성립하지 않는다. 해당 값은 2보다..
이코테 - 안테나 with JAVA 이 문제에서 가장 중요한 점은 값을 기준으로 정렬 후 중간값에 해당하는 인덱스에 값이 정답이 된다는 점이다. 증명은 여러가지 경우의 수를 체크해볼 경우 파악이 가능하다. 코드 import java.util.*; public class Q2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); List values = new ArrayList(); for(int i=0; i
이코테 - 특정 거리의 도시 찾기 with JAVA 1. 입력받을 때는 아래와 같이 nextInt() 써서 입력받자 2. List queue = new ArrayList(); 보다 Queue queue = new LinkedList();가 효율적이다. -> 전자는 삭제시 모든 데이터를 앞으로 땡기기위해 옮겨야 하지만 후자는 그렇지 않기 때문이다. 3. 단방향이기에 방문처리가 필요없다. import java.util.*; public class Q1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int k = sc.nextInt(); int x = sc.nextInt(); List m..
배포과정 : SpringBoot + Docker + Amazon EC2 목적 하나의 애플리케이션을 제작해보았고 이를 배포하는 과정을 기록해보려고 한다. 초기 과정을 기록해두는 것으로 나중에 방법을 개선하는 방향으로 나아가 보려고 한다. 과정 1. SpringBoot 프로젝트 제작 2. Dockerfile 작성 3. Git Repository 생성 및 push 4. Amazon EC2를 ubuntu 운영체제 이용해 컴퓨터 대여 5. 대여한 컴퓨터에 리눅스 접속 6. 대여한 컴퓨터에 깃 코드 Clone 7. 자바, 도커, Maven 설치 8. 기존의 작성한 Dockerfile을 이용해 해당 파일 빌드 및 이미지 생성 9. 컨테이너 실행 및 서버 연결 1. SpringBoot 프로젝트 제작 기존의 프로젝트를 이용해 이를 배포하려고 한다. 구성은 아래와 같다. Springboot ..
Docker Basic 도커 (Docker) - 리눅스가 아닌 운영체제에서 리눅스 환경을 가상으로 구축하고 여러 애플리케이션을 설치하여 실행시키는 방법 - 운영체제의 의존도가 줄어든다. - VM과 달리 운영체제 전체를 설치하는 것이 아닌 운영체제의 기능 일부분만을 가져와 사용한다. " 예를 들자면, Docker의 컨테이너 서버에서 데이터를 저장시 명령을 호스트 운영체제의 리눅스 커널을 공유하며 명령을 하고 호스트 운영체제는 HDD 또는 SSD에 데이터를 저장한다. " SSD : 플래시 메모리로 하드디스크와 같이 비화발성이지만 좀 더 빠른 고성능을 제공한다. 특징 - 컨테이너 기반의 오픈소스 가상화 플랫폼 - 프로그램을 외부 환경과 격리시켜 구동 가능하게 해주는 플랫폼 - 서버 운영시 예를 들어, 서버를 구동하는 컴퓨터 위에 도..
Programmers - 무지의 먹방 라이브 with JAVA 로직 우선, 큐에 [음식 양, 음식 번호] 를 넣고 음식양이 오름차순이 되도록 정렬한다. 예를 들어, [1, 2], [2, 3], [3, 1]이 있다고 가정하자. - 처음 꺼낸 리스트는 [1, 2]가 된다. - 음식양 1을 전체 리스트의 길이(3)만큼 먹는다. 하지만 1*3은 k보다 작으므로 더 진행 - 두번째 꺼낸 리스트는 [2, 3]이 된다. - 전에 1만큼 먹었기 때문에 2-1 = 1이 된다. - 음식양 1을 전체 리스트의 길이(2)만큼 먹는다. 그럼 지금까지 3 + 2를 먹었다. 이는 k와 같으므로 리스트를 다시 넣어주고 종료한다. (지금까지 먹은양이 k보다 크다는 의미는 이번 음식이 없어지면서 또는 없어지기 전에 k만큼 먹었다고 할 수 있다.) 종료 시점에 리스트의 번호만 보면 [1, 3]이 남..
이코테 - 만들 수 없는 금액 with JAVA 문제 N개의 동전으로 만들 수없는 양의 정수 중 최솟값을 구하라 로직 예를 들어, [1, 1, 2, 3, 9] 원이 있다고 가정하자. 1. 1원을 가지고는 1원까지 만들 수 있다. 2. 1원을 가지고는 2원까지 만들 수 있다. 3. 2원을 가지고는 4원까지 만들 수 있다. 4. 3원을 가지고는 7원까지 만들 수 있다. 5. 9원을 가지고는 16원까지 만들 수 있다. 증명 1원 - 1 2원 - 1, 1 3원 - 1, 2 4원 - 1, 1, 2 5원 - 3, 2 6원 - 3, 2, 1 즉, 결론적으로 a원을 가지고 있다면 기존에 만들 수 있는 금액 m원에 더해 a+m원까지 만들 수 있다. 코드 import java.util.*; public class Q4 { public static void main(St..