문제 : 주사위(1 ~ 6)로 이동가능 한 모든 경우의 수
public class Dice {
public static int countWays(int n) {
if( n < 0)
return 0;
if(n == 0)
return 1;
return countWays(n-1) +
countWays(n-2) +
countWays(n-3) +
countWays(n-4) +
countWays(n-5) +
countWays(n-6);
}
}
문제 : 이미지에서 닫힌 영역의 단색 칠하기 - 그림판의 채우기 기능
public class Painter {
public static void paint(int[][] image, int x, int y, int newC) {
paintRec( image, x, y, newC, image[y][x]);
}
public static void paintRec(int[][] image, int x, int y, int newC, int curCol ){
if(x < 0 || y < 0 || y>=image.length || x>=image[0].length) {
return;
}
if(image[y][x] == newC || image[y][x] != curCol){
return;
}
image[y][x] = newC;
paintRec(image, x+1, y, newC, curCol);
paintRec(image, x, y+1, newC, curCol);
paintRec(image, x-1, y, newC, curCol);
paintRec(image, x, y-1, newC, curCol);
}
}
문제 : n 비트 의 모든 경우의 수 출력
import java.util.ArrayList;
public class Exercise {
public static ArrayList<String> bitCombinations(int n) {
String s="";
return bitCombRec(n , s, new ArrayList<String>());
}
private static ArrayList<String> bitCombRec(int n, String s, ArrayList<String> list){
if(s.length() == n){
list.add(s);
return list;
}
bitCombRec(n, s+"0", list);
bitCombRec(n, s+"1", list);
return list;
}
}
문제 : 순열구하기
import java.util.List;
import java.util.ArrayList;
public class Permutation {
public static List<String> getPermutations(String s) {
String iterStr ="";
return permRec(s, new boolean[s.length()] , iterStr, new ArrayList<String>() );
}
private static List<String> permRec(String s, boolean[] pick, String iterStr, ArrayList<String> list){
if(s.length() == iterStr.length()){
list.add(iterStr);
}
for(int i =0; i<s.length(); i++){
if(pick[i]){
continue;
}
pick[i] = true;;
permRec(s, pick, iterStr + s.charAt(i), list);
pick[i] = false;
}
return list;
}
}
문제 : 괄호 짝 찾기 (String배열 만든 뒤 넣기)
import java.util.List;
import java.util.ArrayList;
public class Parentheses {
public static List<String> getPairs(int n) {
return parenRec(n, n, "", new ArrayList<String>());
}
private static List<String> parenRec(int l, int r, String iterStr, ArrayList<String> list){
if(l > r)
return list;
if(l<0 || r <0)
return list;
if(l ==0 && r ==0){
list.add(iterStr);
return list;
}
parenRec(l-1, r, iterStr+"(", list);
parenRec(l,r-1, iterStr+")", list);
return list;
}
}