[백준 1987] 알파벳

2024. 8. 30. 02:56·Study/Algorithm
728x90

문제


접근

  • DFS 탐색을 통해서 말을 이동할 수 있는 경로 탐색
    • 이때, alphabets 배열을 통해서 중복된 알파벳의 경로로 가지 않도록 해야 한다고 생각하였다.
    • alphabets 배열을 A~Z까지의 26의 크기를 가진 배열로 설정하였다.
    • 해당 알파벳의 정수 값에서 'A'의 정수값을 빼면 해당 알파벳의 인덱스 값이 되기 때문에 탐색한 경우 해당 배열 인덱스에 위치한 값을 true로 변환해주었다.
  • 백트래킹!!!!
    • 알파벳을 탐색하면서 중복 처리를 한 map에서 말의 움직임을 count한다.
    • 이때 다른 경로를 탐색하기 위해 중복 처리를 한 부분을 다시 원복시킨다.
    • 원복 시킨 것에서 다른 경로로 탐색하고 다시 중복처리를 진행하면서 말의 움직임을 또 count한다.
    • 탐색할 때마다 maxCount를 최댓값으로 갱신해주면서 최종 값을 구할 수 있다.


코드

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

public class Main {
    static char[][] map;
    static int R, C;
    static boolean[] alphabets;
    static int maxCount;
    static int[] dx = {-1, 1, 0, 0};
    static int[] dy = {0, 0, -1, 1};
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        R = Integer.parseInt(st.nextToken());
        C = Integer.parseInt(st.nextToken());

        map = new char[R][C];
        alphabets = new boolean[26];
        for (int i = 0; i < R; i++) {
            String row = br.readLine();
            map[i] = row.toCharArray();
        }

        maxCount = 0;
        dfs(0, 0, 1);
        System.out.println(maxCount);

    }


    static void dfs(int x, int y, int count) {
        int index = map[x][y] - 'A';
        alphabets[index] = true;
        maxCount = Math.max(maxCount, count);

        for (int i = 0; i < 4; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];
            if (nx >= 0 && ny >= 0 && nx < R && ny < C && !alphabets[map[nx][ny] - 'A']) {
                dfs(nx, ny, count + 1);
            }
        }
        // 백트래킹
        alphabets[index] = false;

    }
}

 

728x90
반응형
저작자표시 (새창열림)

'Study > Algorithm' 카테고리의 다른 글

[백준 5525] IOIOI  (1) 2024.09.03
[백준 9465] 스티커  (1) 2024.08.30
[백준 11726] 2*n 타일링  (2) 2024.08.30
[백준 11725] 트리의 부모 찾기  (1) 2024.08.30
[백준 14502] 연구소  (0) 2024.08.27
'Study/Algorithm' 카테고리의 다른 글
  • [백준 5525] IOIOI
  • [백준 9465] 스티커
  • [백준 11726] 2*n 타일링
  • [백준 11725] 트리의 부모 찾기
pink_salt
pink_salt
유익함을 주는 개발자가 되도록 keep going
  • pink_salt
    KeepGoingForever
    pink_salt
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • Project (7)
      • WEB study (3)
        • WEB(Springboot) (10)
        • Git, GitLab (13)
        • Clean code (1)
        • FrontEnd (3)
      • Study (21)
        • Algorithm (19)
        • 면접 준비 (2)
      • Cloud Computing (2)
        • AWS (2)
      • 프로그래밍 언어 (35)
        • Java (29)
        • Python (0)
        • javascript (6)
      • 운영체제 (0)
        • Linux (0)
      • Database (4)
        • MongoDB (8)
        • SQL (8)
      • 애플리케이션 개발 (1)
        • Android (1)
      • AI (1)
        • Deeplearning (1)
        • machinelearning (0)
      • Daily (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IT교육
    Git
    Java
    dp
    무료IT교육
    spring boot
    대외활동
    오블완
    codepresso
    SW
    코딩강의
    백준
    코드프레소
    코딩이러닝
    무료코딩교육
    BFS
    자바
    언어
    SWEA
    Query
    빅오표기법
    개념
    python
    Database
    git branch
    티스토리챌린지
    mysql
    객체지향
    MongoDB
    gitlab
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
pink_salt
[백준 1987] 알파벳
상단으로

티스토리툴바