문제 : 주사위(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){
        /**
         * 1. 새로운 색깔과 현재 색깔이 다를때
         * 2. 선택된 같은 영역 에서만 수행
        */
            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);
    }
}
/**
 * 풀이
 * 1) 그림 영역 안에서만 돌도록 조건 세팅
 * 2) 색깔 채우기 이므로, 현재 칸의 색깔과 새로운 색깔이 같으면 탈출
 * 3) 현재색깔을 선택한 영역 안에서만 돌도록.
*/

문제 : 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;

    }
}

results matching ""

    No results matching ""