분류 전체보기
-
프로그래머스 : 디펜스 게임 (Java) 문제 링크 확인 풀이 처음 가지고 있는 병사 수 n, 무적권의 수 k, 라운드마다 등장하는 적의 수를 담은 1차원 배열 enemy가 주어진다. i번째 라운드의 적의 수 enemy[i]를 막으려면 n개의 가지고 있는 병사(목숨)에서 enemy[i] 만큼을 차감하고, 차감한 후의 n값이 0 이상이어야 해당 라운드를 통과한 것으로 본다. 간단하게 로직을 구상해보자. 남은 병사 수 remain을 선언한다. 초기값은 n 값과 같다. 최대 enemy 배열 길이만큼 아래 내용을 반복한다. (현재 i번째 반복) remain에서 enemy[i]를 빼준다. 조건을 만족하는 한가지를 진행한다. 만약 enemy[i]를 뺀 remain이 0보다 작다면 라운드를 통과할 수 없다. rema..
[프로그래머스] 디펜스 게임프로그래머스 : 디펜스 게임 (Java) 문제 링크 확인 풀이 처음 가지고 있는 병사 수 n, 무적권의 수 k, 라운드마다 등장하는 적의 수를 담은 1차원 배열 enemy가 주어진다. i번째 라운드의 적의 수 enemy[i]를 막으려면 n개의 가지고 있는 병사(목숨)에서 enemy[i] 만큼을 차감하고, 차감한 후의 n값이 0 이상이어야 해당 라운드를 통과한 것으로 본다. 간단하게 로직을 구상해보자. 남은 병사 수 remain을 선언한다. 초기값은 n 값과 같다. 최대 enemy 배열 길이만큼 아래 내용을 반복한다. (현재 i번째 반복) remain에서 enemy[i]를 빼준다. 조건을 만족하는 한가지를 진행한다. 만약 enemy[i]를 뺀 remain이 0보다 작다면 라운드를 통과할 수 없다. rema..
2022.12.10 -
Docker Compose 도커 컴포즈는 여러 컨테이너를 모아서 하나의 애플리케이션을 구성할 수 있도록 해준다. yaml 파일을 사용하여 애플리케이션의 서비스를 구성한다. 이후, 단일 명령으로 yaml 파일에 정의된 모든 서비스를 만들고 시작한다. 여러 컨테이너를 띄우려면 docker run ... 명령을 컨테이너 수 만큼 실행해야 한다. docker-compose를 이용하면 하나의 파일에 여러 컨테이너를 실행하도록 미리 작성해두고, docker-compose.yml 파일만 실행하도록 하면 된다. 이렇게하면 여러 컨테이너를 한번에 띄우기 쉬워지고, 실행시 필요한 설정 정보들도 관리하기 편해진다. 컨테이너를 백업하거나 다른 환경으로 옮길 때에도, 기존에 작성한 docker-compose.yml 파일과 컨테..
[Docker] Docker-ComposeDocker Compose 도커 컴포즈는 여러 컨테이너를 모아서 하나의 애플리케이션을 구성할 수 있도록 해준다. yaml 파일을 사용하여 애플리케이션의 서비스를 구성한다. 이후, 단일 명령으로 yaml 파일에 정의된 모든 서비스를 만들고 시작한다. 여러 컨테이너를 띄우려면 docker run ... 명령을 컨테이너 수 만큼 실행해야 한다. docker-compose를 이용하면 하나의 파일에 여러 컨테이너를 실행하도록 미리 작성해두고, docker-compose.yml 파일만 실행하도록 하면 된다. 이렇게하면 여러 컨테이너를 한번에 띄우기 쉬워지고, 실행시 필요한 설정 정보들도 관리하기 편해진다. 컨테이너를 백업하거나 다른 환경으로 옮길 때에도, 기존에 작성한 docker-compose.yml 파일과 컨테..
2022.12.09 -
도커 컴포즈를 통해 MySQL 컨테이너 생성 및 데이터 삽입 docker-compose 파일 작성 docker-compose 를 통해 mysql 컨테이너를 띄우기 위한 파일을 작성한다. # docker-compose.yml version: "3.8" services: mysql: container_name: mysql_local image: mysql:8.0.30 volumes: - ./db/conf.d:/etc/mysql/conf.d - ./db/initdb.d:/docker-entrypoint-initdb.d ports: - "3306:3306" environment: - MYSQL_DATABASE=pass_local - MYSQL_USER=pass_local_user - MYSQL_PASSWORD=..
[Docker] MySQL 컨테이너에 초기 데이터 삽입도커 컴포즈를 통해 MySQL 컨테이너 생성 및 데이터 삽입 docker-compose 파일 작성 docker-compose 를 통해 mysql 컨테이너를 띄우기 위한 파일을 작성한다. # docker-compose.yml version: "3.8" services: mysql: container_name: mysql_local image: mysql:8.0.30 volumes: - ./db/conf.d:/etc/mysql/conf.d - ./db/initdb.d:/docker-entrypoint-initdb.d ports: - "3306:3306" environment: - MYSQL_DATABASE=pass_local - MYSQL_USER=pass_local_user - MYSQL_PASSWORD=..
2022.12.09 -
프로그래머스 : 점 찍기 (Java) 문제 링크 확인 풀이 입력되는 정수 k, d에 대하여 조건을 만족하는 (x, y) 좌표를 찾아야 한다. 문제에서 조건은 다음과 같다. 원점(0, 0)과의 거리가 d를 넘지 않아야 한다. 좌표의 x, y 값은 k의 배수이다. 기본적으로 원점과 x=0 일 때 y 좌표값, y=0 일 때 x 좌표값들의 개수를 추가해둔다. 코드로 나타내면 아래와 같다. long answer = 1; // 원점 1개 // d : 최대 거리 // d를 k로 나눈 값에 2를 곱해주면, // x=0 일 때, y=0 일 때의 좌표값들의 개수이다. answer += ((d / k) * 2); 이제 x, y가 0이 아닐 때 좌표 조합을 구해야 한다. (x, y) 좌표와 원점과의 거리가 d를 넘지 않아야 ..
[프로그래머스] 점 찍기프로그래머스 : 점 찍기 (Java) 문제 링크 확인 풀이 입력되는 정수 k, d에 대하여 조건을 만족하는 (x, y) 좌표를 찾아야 한다. 문제에서 조건은 다음과 같다. 원점(0, 0)과의 거리가 d를 넘지 않아야 한다. 좌표의 x, y 값은 k의 배수이다. 기본적으로 원점과 x=0 일 때 y 좌표값, y=0 일 때 x 좌표값들의 개수를 추가해둔다. 코드로 나타내면 아래와 같다. long answer = 1; // 원점 1개 // d : 최대 거리 // d를 k로 나눈 값에 2를 곱해주면, // x=0 일 때, y=0 일 때의 좌표값들의 개수이다. answer += ((d / k) * 2); 이제 x, y가 0이 아닐 때 좌표 조합을 구해야 한다. (x, y) 좌표와 원점과의 거리가 d를 넘지 않아야 ..
2022.12.06 -
예산(BOJ : 2512) 백준 2512번 : 예산 본문 제한 시간 제한 메모리 제한 1초 128MB 문제 국가의 역할 중 하나는 여러 지방의 예산요청을 심사하여 국가의 예산을 분배하는 것이다. 국가예산의 총액은 미리 정해져 있어서 모든 예산요청을 배정해 주기는 어려울 수도 있다. 그래서 정해진 총액 이하에서 가능한 한 최대의 총 예산을 다음과 같은 방법으로 배정한다. 모든 요청이 배정될 수 있는 경우에는 요청한 금액을 그대로 배정한다. 모든 요청이 배정될 수 없는 경우에는 특정한 정수 상한액을 계산하여 그 이상인 예산요청에는 모두 상한액을 배정한다. 상한액 이하의 예산요청에 대해서는 요청한 금액을 그대로 배정한다. 예를 들어, 전체 국가예산이 485이고 4개 지방의 예산요청이 각각 120, 110, 1..
백준 2512번 : 예산예산(BOJ : 2512) 백준 2512번 : 예산 본문 제한 시간 제한 메모리 제한 1초 128MB 문제 국가의 역할 중 하나는 여러 지방의 예산요청을 심사하여 국가의 예산을 분배하는 것이다. 국가예산의 총액은 미리 정해져 있어서 모든 예산요청을 배정해 주기는 어려울 수도 있다. 그래서 정해진 총액 이하에서 가능한 한 최대의 총 예산을 다음과 같은 방법으로 배정한다. 모든 요청이 배정될 수 있는 경우에는 요청한 금액을 그대로 배정한다. 모든 요청이 배정될 수 없는 경우에는 특정한 정수 상한액을 계산하여 그 이상인 예산요청에는 모두 상한액을 배정한다. 상한액 이하의 예산요청에 대해서는 요청한 금액을 그대로 배정한다. 예를 들어, 전체 국가예산이 485이고 4개 지방의 예산요청이 각각 120, 110, 1..
2022.12.04 -
랜선 자르기(BOJ : 1654) 백준 1654번 : 랜선 자르기 본문 제한 시간 제한 메모리 제한 2초 128MB 문제 집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다. 이미 오영식은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다.) 편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선..
백준 1654번 : 랜선 자르기랜선 자르기(BOJ : 1654) 백준 1654번 : 랜선 자르기 본문 제한 시간 제한 메모리 제한 2초 128MB 문제 집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다. 이미 오영식은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다.) 편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선..
2022.12.04 -
나무 자르기(BOJ : 2805) 백준 2805번 : 나무 자르기 본문 제한 시간 제한 메모리 제한 1초 256MB 문제 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다. 목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높..
백준 2805번 : 나무 자르기나무 자르기(BOJ : 2805) 백준 2805번 : 나무 자르기 본문 제한 시간 제한 메모리 제한 1초 256MB 문제 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다. 목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높..
2022.12.04 -
이진 탐색 이진 탐색(Binary Search)은 이분 탐색이라고도 하며, 리스트 내에서 데이터를 매우 빠르게 탐색하는 알고리즘이다. 이진 탐색 조건 이진 탐색은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘이다. 데이터가 무작위일 때는 사용할 수 없지만 이미 정렬되어 있다면 매우 빠르게 데이터를 찾을 수 있다. 이진 탐색 특징 이진 탐색은 탐색 범위를 절반씩 좁혀가며 데이터를 탐색한다. 이진 탐색은 위치를 나타내는 변수 3개를 사용하는데, 탐색하고자 하는 범위의 시작점, 끝점, 중간점이다. 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는 것이 이진 탐색 과정이다. 이진 탐색 동작 과정 이진 탐색의 동작 과정은 다음과 같다. 데이터 리스트(arr)..
이진 탐색 알고리즘이진 탐색 이진 탐색(Binary Search)은 이분 탐색이라고도 하며, 리스트 내에서 데이터를 매우 빠르게 탐색하는 알고리즘이다. 이진 탐색 조건 이진 탐색은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘이다. 데이터가 무작위일 때는 사용할 수 없지만 이미 정렬되어 있다면 매우 빠르게 데이터를 찾을 수 있다. 이진 탐색 특징 이진 탐색은 탐색 범위를 절반씩 좁혀가며 데이터를 탐색한다. 이진 탐색은 위치를 나타내는 변수 3개를 사용하는데, 탐색하고자 하는 범위의 시작점, 끝점, 중간점이다. 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는 것이 이진 탐색 과정이다. 이진 탐색 동작 과정 이진 탐색의 동작 과정은 다음과 같다. 데이터 리스트(arr)..
2022.12.01 -
정렬 알고리즘 정렬이란 데이터를 특정한 기준에 따라서 순서대로 나열하는 것을 말한다. 정렬 알고리즘은 다양한 알고리즘이 존재하는데, 그 중 대표적인 정렬 알고리즘인 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬에 대해서 정리하고자 한다. 선택 정렬 선택 정렬 알고리즘은 리스트에서 매번 가장 작은 데이터를 선택하여 차근차근 정렬하는 방식의 알고리즘이다. 가장 작은 데이터를 선택하여 앞으로 보내는 과정을 반복하면 전체 데이터의 정렬이 이루어진다. 선택 정렬의 과정은 다음과 같다. 리스트의 길이(N)-1 만큼 다음 내용을 반복한다. 반복 횟수를 K라고 한다(0 = 0 && arr[a] > tmp) { // a 포인터의 값을 한 칸 다음으로 민다. arr[a + 1] = arr[a]; a--; } // b 포인..
정렬 알고리즘정렬 알고리즘 정렬이란 데이터를 특정한 기준에 따라서 순서대로 나열하는 것을 말한다. 정렬 알고리즘은 다양한 알고리즘이 존재하는데, 그 중 대표적인 정렬 알고리즘인 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬에 대해서 정리하고자 한다. 선택 정렬 선택 정렬 알고리즘은 리스트에서 매번 가장 작은 데이터를 선택하여 차근차근 정렬하는 방식의 알고리즘이다. 가장 작은 데이터를 선택하여 앞으로 보내는 과정을 반복하면 전체 데이터의 정렬이 이루어진다. 선택 정렬의 과정은 다음과 같다. 리스트의 길이(N)-1 만큼 다음 내용을 반복한다. 반복 횟수를 K라고 한다(0 = 0 && arr[a] > tmp) { // a 포인터의 값을 한 칸 다음으로 민다. arr[a + 1] = arr[a]; a--; } // b 포인..
2022.12.01 -
DFS/BFS DFS와 BFS는 대표적인 그래프 탐색 알고리즘이다. DFS는 스택 자료구조 또는 재귀 함수를 통해 구현할 수 있고, BFS는 큐 자료구조를 통해 알고리즘을 구현할 수 있다. 그래프는 노드와 간선으로 표현되며 이때 노드를 정점이라고도 한다. 그래프 탐색이란 하나의 노드를 시작으로 다수의 노드를 방문하는 것을 말한다. 또한 두 노드가 간선으로 연결되어 있다면 ‘두 노드는 인접하다’라고 표현한다. 프로그래밍에서 그래프는 크게 2가지 방식으로 표현할 수 있다. 인접 행렬 : 2차원 배열로 그래프의 연결 관계를 표현하는 방식 인접 리스트 : 리스트로 그래프의 연결 관계를 표현하는 방식 메모리 측면에서 인접 행렬 방식은 모든 관계를 저장하므로 노드의 개수가 많을 수록 메모리가 불필요하게 낭비된다. ..
깊이 우선 탐색(DFS)와 너비 우선 탐색(BFS)DFS/BFS DFS와 BFS는 대표적인 그래프 탐색 알고리즘이다. DFS는 스택 자료구조 또는 재귀 함수를 통해 구현할 수 있고, BFS는 큐 자료구조를 통해 알고리즘을 구현할 수 있다. 그래프는 노드와 간선으로 표현되며 이때 노드를 정점이라고도 한다. 그래프 탐색이란 하나의 노드를 시작으로 다수의 노드를 방문하는 것을 말한다. 또한 두 노드가 간선으로 연결되어 있다면 ‘두 노드는 인접하다’라고 표현한다. 프로그래밍에서 그래프는 크게 2가지 방식으로 표현할 수 있다. 인접 행렬 : 2차원 배열로 그래프의 연결 관계를 표현하는 방식 인접 리스트 : 리스트로 그래프의 연결 관계를 표현하는 방식 메모리 측면에서 인접 행렬 방식은 모든 관계를 저장하므로 노드의 개수가 많을 수록 메모리가 불필요하게 낭비된다. ..
2022.11.29