| 1 | 27433 | 팩토리얼 2 |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(factorial(n));
}
public static long factorial(long n) {
if(n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n-1);
}
}
}
*0 <= n <= 20 : 반환 값으로 long 사용
| 2 | 10870 | 피보나치 수 5 |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(fibonacci(n));
}
public static int fibonacci(int n) {
if(n == 0) {
return 0;
} else if(n == 1) {
return 1;
} else {
return fibonacci(n-1) + fibonacci(n-2);
}
}
}
*피보나치 수열: fn = fn-1 + fn-2
| 3 | 25501 | 재귀의 귀재 |
팰린드롬 찾기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int count = 0;
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(reader.readLine());
for(int i = 0; i < T; i++) {
String str = reader.readLine();
count = 0;
System.out.println(isPalindrome(str) + " " + count);
}
}
public static int recursion(String str, int l, int r) {
count++;
if(l >= r) {
return 1;
} else if(str.charAt(l) != str.charAt(r)) {
return 0;
} else {
return recursion(str, l+1, r-1);
}
}
public static int isPalindrome(String str) {
return recursion(str, 0, str.length() - 1);
}
}
| 4 | 24060 | 알고리즘 수업 - 병합 정렬 1 |
병합 정렬 도중 K번째로 저장되는 수 반환
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int tmp[];
static int K;
static int count = 0;
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
int A = Integer.parseInt(tokenizer.nextToken());
K = Integer.parseInt(tokenizer.nextToken());
tmp = new int[A];
tokenizer = new StringTokenizer(reader.readLine());
int[] arr = new int[A];
for(int i = 0; i < A; i++) {
arr[i] = Integer.parseInt(tokenizer.nextToken());
}
mergeSort(arr, 0, arr.length - 1);
if(count < K) {
System.out.println(-1);
}
}
public static void mergeSort(int[] arr, int left, int right) {
if(left < right) {
int q = (left + right) / 2;
mergeSort(arr, left, q);
mergeSort(arr, q + 1, right);
merge(arr, left, q, right);
}
}
public static void merge(int[] arr, int left, int mid, int right) {
int p = left;
int q = mid + 1;
int idx = p;
while(p <= mid && q <= right) {
if(arr[p] <= arr[q]) {
tmp[idx++] = arr[p++];
} else {
tmp[idx++] = arr[q++];
}
}
while(p <= mid) {
tmp[idx++] = arr[p++];
}
while(q <= right) {
tmp[idx++] = arr[q++];
}
for(int i = left; i <= right; i++) {
arr[i] = tmp[i];
if(++count == K) {
System.out.println(arr[i]);
}
}
}
}
| 5 | 4779 | 칸토어 집합 |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String input;
while((input = reader.readLine()) != null) {
int N = Integer.parseInt(input);
int pow = (int)Math.pow(3, N);
char[] arr = new char[pow];
Arrays.fill(arr, '-');
cantorSet(arr, 0, arr.length);
System.out.println(arr);
}
}
public static void cantorSet(char[] arr, int start, int size) {
if(size < 3) {
return;
}
int m = size / 3;
cantorSet(arr, start, m);
cantorSet(arr, start + 2 * m, m);
for(int i = start + m; i < start + 2 * m; i++) {
arr[i] = ' ';
}
}
}
| 6 | 2447 | 별 찍기 - 10 |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
private static char[][] arr;
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(reader.readLine());
arr = new char[N][N];
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
arr[i][j] = '*';
}
}
printStar(0, 0, N);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < arr.length; i++) {
sb.append(arr[i]).append("\n");
}
System.out.print(sb);
}
/**
* 크기 N의 정사각형의 가운데 (N/3)×(N/3) 정사각형을 공백으로 채우기
* @param x,y 정사각형 시작점의 좌표
* @param size 정사각형 변의 길이
*/
public static void printStar(int x, int y, int size) {
if(size < 3) {
return;
}
int newSize = size / 3;
printStar(x, y, newSize);
printStar(x + newSize, y, newSize);
printStar(x + newSize * 2, y, newSize);
printStar(x, y + newSize, newSize);
printStar(x, y + newSize * 2, newSize);
printStar(x + newSize * 2, y + newSize, newSize);
printStar(x + newSize, y + newSize * 2, newSize);
printStar(x + newSize * 2, y + newSize * 2, newSize);
for(int i = x + newSize; i < x + newSize * 2; i++) {
for(int j = y + newSize; j < y + newSize * 2; j++) {
arr[i][j] = ' ';
}
}
}
}
| 7 | 11729 | 하노이 탑 이동 순서 |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
private static final StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(reader.readLine());
//count: 2^n - 1
sb.append((1 << N) - 1).append("\n");
towerOfHanoi(N, 1 ,2, 3);
System.out.print(sb);
}
public static void towerOfHanoi(int n, int from, int by, int to) {
if(n == 1) {
sb.append(from + " " + to).append("\n");
return;
}
towerOfHanoi(n-1, from, to, by);
sb.append(from + " " + to).append("\n");
towerOfHanoi(n-1, by, from, to);
}
}
'CT' 카테고리의 다른 글
| [BOJ] 22단계 동적 계획법 1 (0) | 2023.04.20 |
|---|---|
| [BOJ] 21단계 백트래킹 (0) | 2023.04.18 |
| [BOJ] 19단계 큐, 덱 (0) | 2023.04.14 |
| [BOJ] 18단계 스택 (0) | 2023.04.13 |
| [BOJ] 17단계 심화2 (0) | 2023.04.13 |