morenow
morenow
morenow
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (5)
    • [MSA] Spring Cloud로 개발하는 마이.. (14)
    • Baekjoon Online Judge (40)
    • Programmers (11)
    • Spring Boot (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JWT단점
  • successHandler
  • write skew
  • B+ Tree
  • Feign Client
  • B Tree
  • Refresh Token Refresh
  • lost update
  • HTTP Interface
  • Id Token
  • jwt
  • re-distribution
  • dirty write
  • copy up
  • HttpExchange
  • Open Feign
  • 백준20058C++
  • 백준 파이어스톰
  • 마법사 상어와 파이어스톰
  • Spring Boot

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
morenow

morenow

Baekjoon Online Judge

[BOJ] 1987 : 알파벳 (Java)

2023. 10. 26. 03:28

https://www.acmicpc.net/problem/1987

 

1987번: 알파벳

세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으

www.acmicpc.net

걸린 시간 : 23분 22초


전형적인 백트래킹 문제이다. 단, 재귀함수 호출 시 알파벳을 지나갔는지에 대한 검사도 해야 한다.

이 검사에는 HashSet 자료구조를 썼다.

정답 코드

import java.io.*;
import java.util.*;

public class BOJ1987 {

    static int R, C;
    static String[] board = new String[21];
    static boolean[][] vis = new boolean[21][21];
    static int answer = 1;
    static int pass = 1;
    static HashSet<Character> hashSet = new HashSet<>();
    static int[] di = {-1, 0, 0, 1};
    static int[] dj = {0, -1, 1, 0};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        R = Integer.parseInt(input[0]);
        C = Integer.parseInt(input[1]);
        for (int i = 0; i < R; i++) {
            board[i] = br.readLine();
        }
        vis[0][0] = true;
        hashSet.add(board[0].charAt(0));
        dfs(0, 0);
        System.out.println(answer);
    }

    private static void dfs(int ci, int cj) {
        for (int k = 0; k < 4; k++) {
            int ni = ci + di[k];
            int nj = cj + dj[k];
            if (ni < 0 || ni >= R || nj < 0 || nj >= C || vis[ni][nj]) continue;
            if (hashSet.contains(board[ni].charAt(nj))) continue;
            pass++;
            answer = Math.max(pass, answer);
            vis[ni][nj] = true;
            hashSet.add(board[ni].charAt(nj));
            dfs(ni, nj);
            pass--;
            vis[ni][nj] = false;
            hashSet.remove(board[ni].charAt(nj));
        }
    }
}

'Baekjoon Online Judge' 카테고리의 다른 글

[BOJ] 11444 : 피보나치 수 6 (Java)  (0) 2023.11.02
[BOJ] 9251 : LCS (Java)  (0) 2023.11.02
[BOJ] 1744 : 수 묶기 (Java)  (1) 2023.10.26
[BOJ] 21608 : 상어 초등학교 (Java) with 정렬  (1) 2023.10.26
[BOJ] 1941: 영역 구하기 (Java)  (0) 2023.10.19
    'Baekjoon Online Judge' 카테고리의 다른 글
    • [BOJ] 11444 : 피보나치 수 6 (Java)
    • [BOJ] 9251 : LCS (Java)
    • [BOJ] 1744 : 수 묶기 (Java)
    • [BOJ] 21608 : 상어 초등학교 (Java) with 정렬
    morenow
    morenow

    티스토리툴바