목록zerebase (46)
Hyunebee
재귀함수로 푼 하노이탑이다. 재귀함수는 종료조건과 문제정의를 잘해야한다. 종료조건은 블럭이 하나 남았을때 첫번째 기둥에서 마지막 기둥으로 옮기는것 이다. 문제정의 1.N개의 원반을 3번째(가정)으로 옮기기 위해서는 N-1개의 원반을 가운데로 이동을 해야함 2.N번째 원반을 3번째(가정)으로 이동시켜야 한다. 3.그리고 가운데에 있던 N-1개의 원반을 3번째(가정)으로 이동시켜야 한다. 문제를 알고 읽는것이 일단 가장 중요하다. public class Practice5 { static StringBuffer stringBuffer; public static void solution(int n) { stringBuffer = new StringBuffer(); recursion(3,1,2,3); System..
컴퓨터의 기본구조 1.CPU (프로세서) 중앙처리장치는 프로그램 실행과 데이터 처리라는 기능을 담당한다. 2.기억장치 위의 CPU가 처리할 프로그램 코드와 데이터는 기억장치에 저장되는데 기억장치의 특성 용도에 따라 두가지로 나뉜다. 2.1 주기억 장치 반도체 기억장치들로 이루어져 고속의 읽기 및 쓰기가 가능하지만 가격이 비싸고 저장 용량의 한계가 있다. 또한 영구 저장 능력이 없기 때문에 프로그램 실행시 일시적으로 사용되는 저장 장치이다. 2.2 보조저장 장치 영구저장 능력을 가진 기억장치들이다. 저장 밀도가 높고 비트당 가격이 저렴하지만 속도가 느리고 CPU가 직접 읽기/ 쓰기를 할 수 없다. 3.입출력장치 이들 또한 CPU와 직접 데이터를 교환하지 않고 각 장치를 위한 별도의 제어기가 CPU로 부터 ..
제곱과 제곱근 우리가 자주 사용하는 Math를 대신해 바빌로니아 점화식으로 제곱근을 구할 수 있다. public class Practice { static double sqrt(int a, int n){ double result = 1; for(int i = 0; i
조합 서로다른 n개중에서 r개를 선택하는 방법 (순서x, 중복x) 중복조합 서로다른 n개중에서 r개를 선택하는 방법 (순서x, 중복o) ex) 4가지 서로다른 숫자중 3자리숫자를 만들수 있는 경우의 수(순서x, 중복 x) public class Practice { void combination(int[] arr, boolean[] visited, int depth, int n, int r) { if(r == 0){ // 더이상 채울 자리가 없으면 for(int i = 0; i < n; i++){ if(visited[i]){ System.out.print(arr[i] + " "); } } System.out.println(); return; } if(depth == n){ // 더이상 탐색할 곳이 없다면 ..
순열 1.순열 순서를 정해서 나열한다. 서로 다른 n개중 r개를 선택하는 경우의 수(순서를 보장하고, 중복을 허용하지 않는다.) 2.중복 순열 서로 다른 n개중 r개를 선택하는 경우의 수(순서를 보장하고, 중복을 허용한다.) 3.원 순열 원모양 테이블에 n개의 원소를 나열 => 회전하면서 다른 순서도 같은순서로 변함 원위에 순열을 올리는게 아니라 회전하는 순열이다. 이때 회전으로 겹치지 않는 수도 고려해줘야 한다. ex) 4가지 서로다른 숫자중 3자리숫자를 만들수 있는 경우의 수(중복 x) swap을 이용한 구현 import java.util.ArrayList; //서로 다른 4가지 수를 이용하여 세자리 자연수를 만드는 방법 public class Practice { void permutation(int..
경우의 수 어떠한 사건이 일어날 수 있는 가짓수 1.합의 법칙(n(A)∪n(B) => n(A) + n(B) - n(A∩B)) 사건 A 또는 B가 일어날 확률 (사건 A따로 B따로 or) 2.곱의 법칙(n(A x B) => n(A) x n(B)) 사건 A 와 B가 동시에 일어날 확률(And) 대표적인 문제(약수구하기, 최소공배수, 최대공약수) import java.util.ArrayList; public class Practice { //약수 public ArrayList getDivisor(int num){ ArrayList arrayList = new ArrayList(); for(int i=1; i