본문 바로가기

전체 글45

[BOJ] [JAVA] 4779번 칸토어 집합 4779번: 칸토어 집합 칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다. 전체 집합이 유한이라고 가정하고, www.acmicpc.net 재귀로 푸는 문제이다. 입력이 끝나는 위치가 없어서 BufferedReader를 통해 입력을 받아야 한다. 처음 알았다! String s; while ((s = br.readLine()) != null) { 길이가 3^n인 char 배열을 만들고 '-'로 채워 넣는다. 다음으로 kanto 메서드를 만들었다. kanto는 start(시작 지점)과 초기 length를 지정해준다. 가장 처음에는 시작 지점이 index = 0, length = 3 ^ n이다. 이후 l.. 2024. 1. 14.
[BOJ] [JAVA] 24060번 알고리즘 수업 - 병합 정렬 1 24060번: 알고리즘 수업 - 병합 정렬 1 첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 500,000), 저장 횟수 K(1 ≤ K ≤ 108)가 주어진다. 다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109) www.acmicpc.net 세시간은 걸린거같다,,, 후,,, 병합 정렬 개념은 나중에 다시 적어야겠다. 여기서는 이 문제 코드만 적어야징 import java.util.*; public class Main { static int[] A; static int[] tmp; static int cnt = 0; static int m; static int result = -1; public static void main(String[] args) {.. 2024. 1. 14.
[알고리즘] [2] 병합 정렬 import java.util.*; public class Main { static int[] arr; static int [] sortedArr; static int m; static int cnt = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); m = sc.nextInt(); arr = new int[n]; sortedArr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); sortedArr[i] = arr[i]; } mergeSort(0, arr.length - 1); System.out.pr.. 2024. 1. 14.
[BOJ] [JAVA] 20920번 영단어 암기는 괴로워 20920번: 영단어 암기는 괴로워 첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 100\,000$, $1 \leq M \leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단 www.acmicpc.net 어려워서 못풀고 다른 분의 풀이를 보고 다시 공부했다. 이전에 했던 sort를 Comparator을 사용해서 정렬 규칙을 바꾸는 문제이다. 답을 보고 스윽 다시 적으면 쉽게 이해가 되는데 막상 혼자 풀려고 하면 생각이 잘 안나는 것 같다. import java.io.*; import java.util.*; public class Main { public static void main(String[.. 2024. 1. 14.
[BOJ] [JAVA] 1016번 제곱 ㄴㄴ 수 1016번: 제곱 ㄴㄴ 수 어떤 정수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 그 수를 제곱ㄴㄴ수라고 한다. 제곱수는 정수의 제곱이다. min과 max가 주어지면, min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수 www.acmicpc.net 한 달 전에 풀었지만 소수 문제를 몇 번 더 풀어본 후 다시 풀어봤다.(근데 내가 예전에 푼 풀이랑 기가 막히게 똑같다 ㅋㅋ) 이 문제의 핵심은 for문에서 라고 생각한다. start보다 큰 첫 i * i배수를 아래와 같이 잡았다. 나누기를 통해 몫을 구하고 다시 (i * i)를 곱해서 (i * i)의 배수를 만들었다. 이렇게 된다면 a는 항상 start보다 작거나 같은 (i * i)의 배수일 것이다. 만약 a < start라면 a += i * .. 2024. 1. 11.