목록Algorithm (14)
스테코더
알고리즘 - DFS 깊이 우선 탐색 그래프의 모든 정점을 발견하는 가장 단순하고 고전적인 방법 ! 탐색의 각 과정에서 가능한 한 그래프 안으로 ‘깊이’ 들어가려고 시도하며, 막힌 정점에 도달하지 않는 이상 뒤로 돌아가지 않는다 📝풀어볼 문제 DFS와 BFS 연결 요소의 개수 순열 사이클 깊이 우선 탐색 (DFS) ⚠️ 가장 중요한 특정은 더 따라갈 간선이 없을 경우 이전으로 돌아간다는 것 깊이 우선 탐색 구현할 경우 : 스택(stack)의 성질을 활용 → 방문하는 순서대로 정점을 스택에 쌓고 방문이 끝나면 스택에서 pop 알고리즘 해결할 경우 : 재귀 호출을 이용 → 재귀 호출한 함수가 종료하면 호출한 위치로 다시 돌아가기 때문 ✔️ 깊이 우선 탐색은 그래프 전체의 구조를 파악하기 위해 사용되므로, 그래..
BufferedReader & BufferedWriter BufferedReader & BufferedWriter은 이름처럼 버퍼를 사용하여 읽고 쓰는 함수이다. 이 함수는 버퍼를 사용하기 때문에 이를 이용하면 입출력의 효율을 향상시킬 수 있다. 📝풀어볼 문제 찍기 N 기찍 N BufferedReader ⚠️ Scanner은 띄어쓰기(스페이스)와 엔터(개행문자)를 경계로 입력 값을 인식하기 때문에 따로 가공할 필요가 없어 사용하기 편리함. BufferedReader은 엔터만 경계로 인식하고 String으로 데이터가 고정 됨! 사용 방법 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import ja..
연산자 끼워넣기 14888 문제 풀이 전략 수의 개수(n), n개의 수, (n-1)개의 연산자 입력 sign[i] > 0일때 연산자 계산 & 재귀호출 → 재귀 호출 후 sign[i]++로 원상복구 6개의 수들이 재귀 호출로 연산이 끝나면 min,max값 계산 진행 순서 INPUT 6 1 2 3 4 5 6 2 1 1 1 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class no_14888 { public static int n; // n개의 수 public static int[] a; // 수열 public..
피보나치 수 5 10870 문제 풀이 전략 💡 fibo[1] = fibo[2] = 1; 과 같이 base case를 작성하면 0을 입력했을 때 런타임에러(ArrayIndexOfBound)가 발생함 코드 Dynamic Programming으로 풀었을 경우 (재귀보다 메모리 사용량 적음) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(Syst..
최소, 최대 10818 문제 풀이 전략 입력 받을 정수의 개수(n)을 입력 받음 n개의 정수를 입력 받음(num[]) Math함수 사용하여 최대, 최소값 구함 코드 import java.util.Scanner; public class no_10818 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] num = new int[n]; for (int i = 0; i < num.length; i++) { num[i] = sc.nextInt(); } int min = num[0]; int max = num[0]; for (int i = 1; i < num.length; ..
약수 구하기 2501 문제 풀이 전략 num과 index를 입력 받음 1부터 num까지의 숫자 중 num과 나누었을 때 나머지가 0이면→ 약수 값 저장 count 값이 index와 동일하면 반복문을 빠져나옴 → count 값 증가 약수 값 출력 count 값과 index 값이 동일하면 저장한 약수 값 출력 그렇지 않다면 0 출력 (해당 약수 없음) 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class no_2501 { public static void main(String[] args) throws IOE..
최대공약수와 최소공배수 2609 문제 풀이 전략 두 수 (n1, n2)를 입력 받음 n1의 약수 중 큰 것부터 n2로 나누어지는 것을 찾음 → 가장 먼저 n2로 나눠지는 n1의 약수가 최대공약수 n1, n2 중 큰 수의 배수 중 작은 값부터 n1, n2 중 작은 값으로 나누었을 때 나머지가 0인 수를 찾음 → 최소공배수 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class no_2609 { public static void main(String[] args) throws IOException { Buffe..
소수 1312 문제 풀이 전략 💡 a / b를 나눈 결과인 소수를 배열로 바꾸면 index 에러 발생!!! (ex. 25 / 7의 결과 3.5714....는 배열로 모든 소수자리를 담을 수 없으므로 index 에러) 두 수(a, b)와 소수점 자리수(n)을 입력 받음 n -1번 반복 a를 b로 나눈 나머지에 10을 곱함 그 수를 다시 b로 나누어 나머지를 구함 위 과정을 반복하여 나온 결과에 10을 곱한 후 b로 나눈 몫을 구함 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class no_1312 { pub..