분류 전체보기
-
[알고리즘] Dynamic Programming(동적 계획법, DP) | 백준 1463. 1로 만들기 _Java알고리즘 2023. 8. 29. 15:11
피보나치 수열로 메모이제이션의 필요성 알아보기 피보나치 수열이란? 0과 1로 시작하고 이전의 두 수의 합을 다음 항으로 하는 수열을 피보나치 수열이라 함 0, 1, 1, 2, 3, 5, 8, 13, … 피보나치 수열의 i번째 값을 계산하는 함수 F를 정의하면 다음과 같다 F0 = 0, F1 = 1 Fi = Fi-1 + Fi-2 for i ≥ 2 위의 정의로부터 피보나치 수열의 i번째 항을 반환하는 함수를 재귀함수로 구현할 수 있음 fibo(n) IF n < 2: RETURN n ELSE : RETURN fibo(n-1) + fibo(n-2) 피보나치 수열의 문제점 앞의 예에서 피보나치 수를 구하는 함수를 재귀함수로 구현한 알고리즘은 아래와 같은데 이는 엄청난 중복 호출 문제를 초래함을 알 수 있다. 여기..
-
[BOJ/백준] 17070번 파이프 옮기기 1 _Java알고리즘/백준(BOJ) 2023. 8. 23. 15:18
백준 17070. 파이프 옮기기 1 _Java 🧶 문제 설명 분류 다이나믹 프로그래밍, 그래프 이론, 그래프 탐색 문제 설명 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 번호이고, 행과 열의 번호는 1부터 시작한다. 각각의 칸은 빈 칸이거나 벽이다. 오늘은 집 수리를 위해서 파이프 하나를 옮기려고 한다. 파이프는 아래와 같은 형태이고, 2개의 연속된 칸을 차지하는 크기이다. 파이프는 회전시킬 수 있으며, 아래와 같이 3가지 방향이 가능하다. 파이프는 매우 무겁기 때문에, 유현이는 파이프를 밀어서 이동시키려고 한다. 벽에는 새로운 벽지를 발랐기..
-
[알고리즘] 백트래킹(Backtracking) | 백준 9663. N-Queen _Java알고리즘 2023. 8. 17. 14:49
백트래킹(Backtracking) 알고리즘 백트래킹 알고리즘이란? 백트래킹은 조합 최적화, 문제 해결 등 여러 문제에서 사용되는 알고리즘 기법 중 하나입니다. 주로 모든 가능한 경우의 수를 탐색하면서 해답을 찾는데 사용되며, 문제의 조건을 만족하지 않으면 해당 경로를 포기하고 이전 단계로 돌아가는 방식으로 동작합니다. 백트래킹 알고리즘 구현 단계 선택 (Choose): 다음으로 시도할 선택을 하거나, 다음 상태로 진행합니다. 조건 확인 (Constraint): 선택한 것이 조건을 만족하는지 확인합니다. 해결 여부 판단 (Is it a solution?): 현재 선택과 조건이 문제의 해결을 이끌어냈는지 확인합니다. 해결하지 못한 경우 (No): 선택한 것이 조건을 만족하지 않으면 이전 상태로 돌아갑니다. ..
-
[Next.js] NextJS에서 google font 사용 및 설정하기JavaScript/Next.js 2023. 8. 7. 00:48
Next.js에서 구글 폰트 사용하기 import { 폰트명 } from "next/font/google"; 에 글로벌 폰트 적용시키기 import { Inter } from 'next/font/google' const inter = Inter({ subsets: ['latin'] }) export default function MyApp({ Component, pageProps }) { return ( ) } 한 페이지에서만 폰트 사용하기 import { Inter } from 'next/font/google' const inter = Inter({ subsets: ['latin'] }) export default function Home() { return ( Hello World ) } Font F..
-
[BOJ/백준] 11723번 집합 비트마스크_Java알고리즘/백준(BOJ) 2023. 8. 3. 16:11
백준 11723. 집합 _Java 🧶 문제 설명 비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오. add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다. remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다. check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20) toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20) all: S를 {1, 2, ..., 20} 으로 바꾼다. empty: S를 공집합으로 바꾼다. 입력 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다..
-
[BOJ/백준] 1157번 단어 공부 _Java알고리즘/백준(BOJ) 2023. 8. 1. 09:45
백준 1157. 단어 공부 _Java 🧶 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Collections; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String [] str = br.readLine().toUpperCase().split(""); String[] str2 =..
-
[Java] 자바의 접근 제한자, 싱글톤 패턴으로 객체 instance 생성하기Java 2023. 7. 22. 22:44
자바의 접근 제한자, 싱글톤 패턴으로 객체 instance 생성하기 🍊 접근 제한자 자바(Java)에서는 접근 제한자(access modifier)를 사용하여 클래스, 메서드, 필드, 생성자 등의 멤버들에 대한 접근 범위를 지정할 수 있습니다. 자바에서 사용할 수 있는 네 가지 접근 제한자는 다음과 같습니다. public: 가장 넓은 범위의 접근 제한자입니다. public으로 선언된 멤버는 모든 곳에서 접근할 수 있습니다. 다른 패키지에서도 접근이 가능합니다. protected: protected로 선언된 멤버는 같은 패키지 내에서는 접근 가능하며, 다른 패키지의 하위 클래스에서도 접근 가능합니다. default (package-private): 접근 제한자를 별도로 지정하지 않은 경우를 default ..