자료구조와 알고리듬 With Java 70

Code up 3102 STL stack

Ex) 첫째줄에 N이 입력된다. (1N개가 입력된다. 출처: https://codeup.kr/problem.php?id=3102 package D220316; import java.util.Scanner; interface IStackble100{ boolean empty(); void push(int nData); int peek(); void pop(); void print(); } public class STL implements IStackble100{ private int[] mnArray; private int mnCapacity; private int mnTop; public STL (int nCapacity) { mnArray = new int[nCapacity]; mnCapacity = ..

깊이 우선 탐색(DFS, Depth-First Search)

1. 깊이 우선 탐색 (DFS, Depth-First Search) - 한 우물부터 깊이 판다. - 스택 이용 Ex) //깊이 우선 탐색 코드 public static void SearchDepthFirst(Node node) { Stack stack = new Stack(); stack.push(node); while(!stack.empty()) {// 스택이 비는 순간 끝 Node next = stack.pop(); System.out.println(next.data);// 방문해서 출력 for(Node child : next.children ) { stack.push(child); } } } 2. 너비 우선 탐색 (BFS, Breadth-First Search) - 여러 우물을 동시에 같은 깊이로 ..

트리, 이진 탐색 트리, 레드-블랙 트리

1. 트리 - 널리 이용되는 자료구조 중 하나 - 나무의 "계층적" 구조를 표현한다. Def) 노트(node): 실제로 저장하는 데이터 Def) 루트(root): 최상위에 위치한 데이터 Def) 리프(leaf): 마지막에 위치한 데이터들 - 부모와 자식 관계(부모는 언제나 하나, 자식은 없거나 여러개 가능) - 높이: 어떤 노드->리프 경로의 최대 길이 -> 부모 기준으로 아래 3개 있으면 높이가 3 - 깊이: 어떤 노드->루트 경로의 길이 -> 자식기준으로 위에 3개 있으면 깊이가 3 - 하위 트리(subtree): 어떤 노드 아래의 모든 것을 포함하는 트리 2. 트리의 용도 - 계층적 데이터를 표현 - 검색트리를 통해 검색 알고리즘 구현 가능 Ex) 트리의 저장법 public class Node{ p..

Code up 1929 재귀함수 우박수 (3n+1) (reverse)

Ex) 우박수 문제 역순으로 출력하기 import java.util.Scanner; public class ReverseCollatz { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int m = scan.nextInt(); Reverse(m); System.out.println(m); } public static void Reverse(int n) { if( n % 2 == 1 ) {//홀수일 때 if(n == 1) return; n = 3 * n + 1; Reverse(n); }else {// 짝수일 때 n = n / 2; Reverse(n); } System.out.println(n); } } Note..

Code up 3117 0은 빼!

Ex) 정수k가 입력되고 k줄만큼 숫자들이 입력된다. 마지막에 남은 숫자들의 합을 출력한다. - stack을 이용하여 양수가 입력되면 push(), 0이 입력되면 pop() import java.util.Scanner; interface IStackableZero{ boolean empty(); void pop(); void push(int nData); int peek(); void print(); } public class MinusZero implements IStackableZero{ private int[] mnArray; private int mnTop; private int mnCapacity; public MinusZero(int nCapacity) { mnArray = new int[nC..

Code up 1928 재귀함수 우박수 문제 (basic)

Ex) 입력되는 수 n에 대해 홀수이면 3n + 1, 짝수이면 n / 2 을 출력하는 과정을 반복한다. (n이 1이 될 때까지 ) package D220315; import java.util.Scanner; public class Collatz { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int m = scan.nextInt(); CollatzMethod(m); } public static void CollatzMethod(int n) { System.out.println(n); if( n % 2 == 1 ) {//홀수일 때 if(n == 1) return; n = 3 * n + 1; CollatzMet..

Code up 1920 재귀함수를 이용한 2진수 변환

import java.util.Scanner; public class BinanyOperation { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int m = scan.nextInt(); if(m == 0) { System.out.println(0); }else { BinanyFunc(m); } } public static void BinanyFunc(int n){ if(n == 0) return; else { BinanyFunc(n / 2); System.out.printf("%d", n % 2); } } }

Code up 1714 숫자 거꾸로 출력하기

Ex) Stack을 이용해서 숫자 거꾸로 출력하기 package D220310; import java.util.Scanner; import java.math.*; interface IStackable17141{ boolean empty(); int peek(); void pop(); void push(int nData); // int search(int nData); } public class ReversePrint implements IStackable17141{ private int [] mnArray; private int mnCapacity; private int mnTop; public ReversePrint(int nCapacity) { mnArray = new int[nCapacity]; m..

Java로 Stack 구현하기

Ex) interface IStackable0{ boolean empty(); int peek(); void pop(); void push(int nData); // int search(int nData); } public class StackPractice implements IStackable0{ private int [] mnArray; private int mnCapacity; private int mnTop; public StackPractice(int nCapacity) { mnArray = new int[nCapacity]; mnCapacity = nCapacity; mnTop = 0; } public boolean empty() { return (0 == mnTop); } public vo..