목록Algorithm (30)
내가 개발해볼게!!

https://www.acmicpc.net/problem/1052 1052번: 물병 지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번 www.acmicpc.net 문제 입력 첫째 줄에 N과 K가 주어진다. N은 10^7보다 작거나 같은 자연수이고, K는 1,000보다 작거나 같은 자연수이다. 출력 첫째 줄에 상점에서 사야하는 물병의 최솟값을 출력한다. 만약 정답이 없을 경우에는 -1을 출력한다. 난이도 실버 1 Try 1 N개의 물병을 한번씩 합쳐서 N/2개로 만들려면 N이 2의 배수여야 한다고 생각하고 풀이했다. 2로 나누어떨어지지 않을 때마다 물병을 하나씩 ..

https://www.acmicpc.net/problem/1743 1743번: 음식물 피하기 첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다 www.acmicpc.net 문제 입력 첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다. 좌표 (r, c)의 r은 위에서부터, c는 왼쪽에서부터가 기준이다. 입력으로 주어지는 좌표는 중복되지 않는다. 출..
1. 삽입 정렬의 정의 2. 삽입 정렬의 과정 3. BOJ 11399: ATM 1. 삽입 정렬의 정의 데이터를 하나씩 적절한 위치에 삽입시키는 정렬 시간 복잡도 O(n²)로 느린 편이지만 구현이 쉽다 2. 삽입 정렬의 과정 ① 정렬 범위 내에서 최솟값(최댓값)을 찾는다 ② 맨앞의 데이터와 swap한다 ③ 정렬 범위를 축소한다 ④ 남은 정렬 범위가 없을 때까지 ①~③을 반복한다 3. BOJ 11399: ATM public class B11399_ATM { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] arr = new int[N]; int[] nArr = new i..
1. 선택 정렬의 정의 2. 선택 정렬의 과정 3. BOJ 1427: 소트인사이드 1. 선택 정렬의 정의 배열에서 최솟값(또는 최댓값)을 찾아가며 선택하는 정렬 2. 선택 정렬의 과정 ① 정렬 범위 내에서 최솟값(최댓값)을 찾는다 ② 맨앞의 데이터와 swap한다 ③ 정렬 범위를 축소한다 ④ 남은 정렬 범위가 없을 때까지 ①~③을 반복한다 public static void selectionSort(int[] arr){ int index = 0; int len = arr.length; while(index < len){ int min = arr[index]; int minIdx = index; for(int i=index; i

https://www.acmicpc.net/problem/1377 1377번: 버블 소트 첫째 줄에 N이 주어진다. N은 500,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 A[1]부터 A[N]까지 하나씩 주어진다. A에 들어있는 수는 1,000,000보다 작거나 같은 자연수 또는 0이다. www.acmicpc.net 문제 입력 첫째 줄에 N이 주어진다. N은 500,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 A[1]부터 A[N]까지 하나씩 주어진다. A에 들어있는 수는 1,000,000보다 작거나 같은 자연수 또는 0이다. 출력 정답을 출력한다. 난이도 골드 2 Try 1 버블 소트라는 제목을 보고 곧이곧대로 버블 정렬 알고리즘을 가져다 쓰고 루프 돈 횟수를 출력했는데..
1. 버블 정렬 : 두 인접한 데이터의 크기를 비교하고 swap 연산으로 정렬 1) 시간 복잡도 O(n²)으로 타 정렬 알고리즘보다 오래 걸리는 편. 대신 코드가 간단하다 2) swap 연산 : 두 수의 값을 교환하는 과정. a와 b의 값을 서로 바꾸고 싶을 때 a=b를 바로 해버리면 a에 들어있던 값이 사라져 교환할 수 없게 된다. 따라서 a의 값을 임의의 변수 temp에 저장해두고 a=b를 수행한 뒤 b=temp를 수행해야 한다 public void swap(int[] arr, int i, int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } 3) 과정 인접한 값끼리 비교하며 범위 내의 최댓값을 범위의 맨뒤로 보낸다 범위를 배열 전체에서 맨뒤부터..