Algogosu / algorithm-solving

알고리즘 문제풀기 스터디
0 stars 4 forks source link

Concat : Week 1 #3

Closed qus0in closed 1 month ago

qus0in commented 2 months ago

BOJ10872 : 팩토리얼

import java.io.*;

public class Main { public static void main(String[] args) throws Exception { // 입력 파일에서 읽어오는 경우 (테스트용) // System.setIn(new FileInputStream("src/input.txt"));

    // 표준 입력에서 정수 N을 읽어옴
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int N = Integer.parseInt(br.readLine());
    br.close();

    // 반복문을 이용한 팩토리얼 계산 (주석 처리됨)
    // int result = iteration(N);

    // 재귀를 이용한 팩토리얼 계산 (사용 중)
    int result = recursion(N);

    // DP를 이용한 팩토리얼 계산 (주석 처리됨)
    // int result = dp(N);

    // 결과 출력
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    bw.write(Integer.toString(result));
    bw.flush();
    bw.close();
}

// DP(동적 계획법)를 이용한 팩토리얼 계산 함수
// 이전 계산 결과를 메모이제이션하여 중복 계산을 피함
public static int dp(int n) {
    int[] memo = new int[13]; // 0부터 12까지의 팩토리얼 값을 저장할 배열
    memo[0] = 1; // 0!은 1로 초기화
    memo[1] = 1; // 1!은 1로 초기화

    // 2부터 n까지 반복하며 팩토리얼 계산
    for (int i = 2; i < memo.length; i++) {
        memo[i] = memo[i-1] * i; // i!은 (i-1)! * i로 계산
    }

    return memo[n]; // n!의 값을 반환
}

// 재귀를 이용한 팩토리얼 계산 함수
public static int recursion(int n) {
    // 기저 사례: 0!과 1!은 1
    if (n == 0 || n == 1) {
        return 1;
    }

    // 재귀 호출을 통해 팩토리얼 계산
    return n * recursion(n - 1);
}

// 반복문을 이용한 팩토리얼 계산 함수
public static int iteration(int n) {
    // 0!은 1로 초기화
    if (n == 0) {
        return 1;
    }

    int result = 1; // 팩토리얼 계산 결과를 저장할 변수

    // 2부터 n까지 반복하며 팩토리얼 계산
    for (int i = 2; i <= n; i++) {
        result *= i; // result에 i를 곱해나감
    }

    return result; // n!의 값을 반환
}

}


### BOJ15552 : 빠른 A+B
- BufferReader, BufferWriter를 활용한 빠른 입출력 구현
```java
// package boj15552;

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws Exception {
        // 파일 읽어오기
        // System.setIn(new FileInputStream("src/input.txt"));
        // [시간 초과]
        // 입력
        // Scanner scanner = new Scanner(System.in);
        // int T = scanner.nextInt();
        // for (int i = 0; i < T; i++) {
        //     int A = scanner.nextInt();
        //  int B = scanner.nextInt();
        //  // 출력
        //  System.out.println(A + B);
        // }
        // scanner.close();

        // [빠른 입출력] 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        for (int i = 0; i < T; i++) {
            String[] line = br.readLine().split(" ");
            int A = Integer.parseInt(line[0]);
            int B = Integer.parseInt(line[1]);
            // bw.write에 넣기 전에 문자열 형변환 해줘야 함
            // 개행문자(\n, 엔터)도 직접 넣어줘야 함
            bw.write(Integer.toString(A + B) + "\n");
        }
        br.close();

        bw.flush();
        bw.close();
    }

}

BOJ25083 : 새싹

-\을 활용한 이스케이프 처리

// package boj25083;

public class Main {
    public static void main(String[] args) {
        // Java에서 "는 역슬래시를 붙여서 나타내야함
        System.out.println("         ,r'\"7");
        System.out.println("r`-_   ,'  ,/");    
        // \는 \\로 두 번 붙여야함
        System.out.println(" \\. \". L_r'");
        System.out.println("   `~\\/");
        System.out.println("      |");
        System.out.println("      |");
    }
}
cuwhenicu commented 1 month ago

고생하셨습니다~~