anott
기록
anott
  • 분류 전체보기
    • 오라클
    • SQL
    • 알고리즘
      • 백준저지
      • 프로그래머스
      • SWEA
    • 개발 관련
    • 프론트엔드
      • TypeScript, Next.js
      • React 공식문서 읽기
hELLO · Designed By 정상우.
anott
알고리즘/백준저지

백준저지 3085번 사탕 게임

백준저지 3085번 사탕 게임
알고리즘/백준저지

백준저지 3085번 사탕 게임

2021. 9. 10. 23:15

출처: https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net

 

 

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ3085 {
    static int N, max, cnt;
    static char[][] map;
    static int[][] d = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } }; // 위 아래 왼쪽 오른쪽

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        map = new char[N][N];

        for (int i = 0; i < N; i++) { // 입력
            StringTokenizer st = new StringTokenizer(br.readLine());
            map[i] = (st.nextToken()).toCharArray();
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                for (int dd = 0; dd < 4; dd++) { // 해당 사탕의 위 아래 오른쪽 왼쪽 모두 바꿔보기
                    int dx = i + d[dd][0];
                    int dy = j + d[dd][1];

                    if (isInMap(dx, dy)) {
                        swap(i, j, dx, dy); // 바꾸기
                        char[] col = new char[N]; // 해당 위치의 세로를 일차원 char 배열형태로 입력
                        for (int k = 0; k < N; k++) {
                            col[k] = map[k][j];
                        }
                        char[] row = new char[N]; // 해당 위치의 가로를 일차원 char 배열형태로 입력
                        for (int k = 0; k < N; k++) {
                            row[k] = map[i][k];
                        }
                        swap(dx, dy, i, j); // 원래대로 돌려놓기

                        max = Math.max(max, checkRowCol(row));
                        max = Math.max(max, checkRowCol(col));
                    }
                }
            }
        }
        System.out.println(max); // 답 출력

    }

    private static int checkRowCol(char[] rowcol) { // 일차원 배열에서 가장 많이 연속된 사탕 수 구하기
        int cnt = 1;
        int bigger = 0;
        for (int i = 0; i < N - 1; i++) {
            if (rowcol[i] == rowcol[i + 1]) {
                cnt++;
            } else {
                bigger = Math.max(bigger, cnt);
                cnt = 1;
            }
        }
        bigger = Math.max(bigger, cnt);
        return bigger;
    }

    private static boolean isInMap(int x, int y) { // 맵 안에 있는지 확인
        if (x >= 0 && x < N && y >= 0 && y < N) {
            return true;
        }
        return false;
    }

    private static void swap(int i, int j, int dx, int dy) { // 인접한 두 칸의 사탕 바꾸기
        char temp = map[i][j];
        map[i][j] = map[dx][dy];
        map[dx][dy] = temp;
    }

}

 

저작자표시 비영리 (새창열림)

'알고리즘 > 백준저지' 카테고리의 다른 글

백준저지 1463번 1로 만들기  (0) 2021.09.15
백준저지 9095번 1, 2, 3 더하기  (0) 2021.09.14
백준저지 10158번 개미  (0) 2021.09.08
백준저지 1244번 스위치 켜고 끄기  (0) 2021.09.04
백준저지 12927번 배수 스위치  (0) 2021.09.03
    '알고리즘/백준저지' 카테고리의 다른 글
    • 백준저지 1463번 1로 만들기
    • 백준저지 9095번 1, 2, 3 더하기
    • 백준저지 10158번 개미
    • 백준저지 1244번 스위치 켜고 끄기
    anott
    anott

    티스토리툴바

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인

    단축키

    내 블로그

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

    블로그 게시글

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

    모든 영역

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

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