반응형
dackyy
대기의 연대기
dackyy
전체 방문자
오늘
어제
  • 분류 전체보기 (49)
    • java (7)
    • 코딩테스트 (23)
    • python (10)
    • Network (2)
    • Web (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • SSL
  • 배열
  • 증감 연산자
  • 반복문
  • 논리 연산자
  • TLS
  • 기본 자료형
  • https
  • 비트 연산자
  • 연산
  • 비교 연산자
  • switch
  • 참조 자료형
  • 산술 연산자
  • 조건문
  • 시프트 연산자
  • java
  • 자료형
  • 배열생성
  • 제어문

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dackyy
코딩테스트

[JAVA] Stack를 사용한 깊이우선 탐색 (DFS) Stack제네릭 사용 X

[JAVA] Stack를 사용한 깊이우선 탐색 (DFS) Stack제네릭 사용 X
코딩테스트

[JAVA] Stack를 사용한 깊이우선 탐색 (DFS) Stack제네릭 사용 X

2022. 7. 15. 17:24
반응형

 

Queue와 동일한 미로로 작성하였습니다. 

빨간선 1번, 핑크선 2번, 초록선 3번 순으로 깊이 너비탐색을 통해 탈출구를 찾습니다.

동일하게 stack 크기도 5로 설정하였고 깊이

package Day3;

import java.util.ArrayList;
import java.util.Arrays;

public class MroStack {
    static int[][] map = {{0,0,0,-1,0,0,0,-1}, {0,-1,0,-1,0,-1,0,-1}, {0,-1,0,-1,-1,-1,0,-1}, {0,0,0,0,0,0,0,-1}, {-1,-1,-1,0,-1,-1,-1,-1}, {0,0,-1,0,-1,0,0,-1}, {-1,0,0,0,-1,0,-1,-1}, {-1,-1,-1,0,0,0,0,0}};
    static String[] stack = new String [5];
    static ArrayList<String> log = new ArrayList<String>();
    static int cnt;
    static String start = "0,0";
    static String exit = "7,7";
    static String temp = "";

    public static void main(String[] args) throws OverflowIntQueueException, OverflowIntStackException {
        disp();
        push(start);
        log.add(start);
        while(!exit.equals(temp)){
            search(pop());
            System.out.print("현재위치 : " + temp + " ");
            System.out.print("stack : " + Arrays.toString(stack) + "\n");
        }
    }
    static void search(String str) throws OverflowIntStackException {
        String [] temp = str.split(",");
        int x = Integer.parseInt(temp[0]);
        int y = Integer.parseInt(temp[1]);
        for(int i = x-1;i<=x+1;i+=2){
            valid(i,y);
        }
        for(int j = y-1;j<=y+1;j+=2){
            valid(x,j);
        }
    }
    static void valid(int x, int y) throws OverflowIntStackException {
        String tmp = x + "," + y;
        if(x <0 || y <0) { }
        else if(x > 7 || y > 7) { }
        else if (map[x][y] == -1){ }
        else if (Arrays.asList(stack).contains(tmp)){ }
        else{
            if(!log.contains(tmp)) {
                temp = tmp;
                push(tmp);
            }
        }

    }
    static void disp(){
        for (int[] ints : map) {
            for (int anInt : ints) {
                if (anInt == -1)
                    System.out.print(" ■");
                else {
                    System.out.print(" □");
                }
            }
            System.out.println();
        }
    }
    static void push(String str) throws OverflowIntStackException{
        if(cnt >= stack.length-1)
            throw new OverflowIntStackException();
        stack[cnt++] = str;
    }
    static String pop() throws OverflowIntStackException{
        if(cnt <= 0)
            throw new OverflowIntStackException();
        String n = stack[cnt-1];
        log.add(n);
        stack[cnt--] = null;
        return stack[cnt];
    }
}

 

package Day3;

public class OverflowIntStackException extends Exception {
}
반응형

'코딩테스트' 카테고리의 다른 글

[JAVA] 단순 삽입정렬  (0) 2022.07.18
[JAVA] 단순 선택정렬  (0) 2022.07.18
[JAVA] 원형 Queue를 사용한 너비우선탐색(BFS) Queue제네릭 사용 X (미로탈출)  (0) 2022.07.15
[JAVA] 후위연산자를 이용한 + - 연산 (제네릭 Stack 사용)  (0) 2022.07.14
[JAVA] 후위연산자를 이용한 + - 연산 ( 제네릭 X)  (0) 2022.07.14
    '코딩테스트' 카테고리의 다른 글
    • [JAVA] 단순 삽입정렬
    • [JAVA] 단순 선택정렬
    • [JAVA] 원형 Queue를 사용한 너비우선탐색(BFS) Queue제네릭 사용 X (미로탈출)
    • [JAVA] 후위연산자를 이용한 + - 연산 (제네릭 Stack 사용)
    dackyy
    dackyy

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.