땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • E
  • 이것이 리눅스다 with Rocky Linux9
  • I
  • D
  • ㅗ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원
Algorithm/Algorithm Problem

SWEA 2117 홈 방문 서비스(BFS)

Algorithm/Algorithm Problem

SWEA 2117 홈 방문 서비스(BFS)

2022. 10. 12. 17:42
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


최대한 많은 집에 홈 방범 서비스를 제공


손해를 보지 않으면서 홈 방범 서비스를 가장 많은 집들에 제공하는 서비스 영역
==> 보안회사의 이익이 그냥 양수만 되면 된다는 소리임. 똑같은 서비스 집 수에서 비교할 필요x,

그냥 단순히 서비스 양만 많으면 됨

if k로 되는 운영비용 > 서비스 제공받는 집을 통해 얻는 수익
  break; //현재 k보다 큰 k들은 어짜피 음수나오니까 더 보지 않겠다는 거임

 


마름모 방문처리 해야되니까 1. 맨해튼거리 k인 애들, 2. bfs

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

public class Solution_2117 {
    static int N,M,res,house_cnt;
    static int[][] board;
    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());

        int T = Integer.parseInt(st.nextToken());
        for (int tc = 1; tc < T+1; tc++) {
            st = new StringTokenizer(br.readLine());
            N = Integer.parseInt(st.nextToken());
            M = Integer.parseInt(st.nextToken());

            board = new int[N][N];

            house_cnt = 0;
            for (int i = 0; i < N; i++) {
                st = new StringTokenizer(br.readLine());
                for (int j = 0; j < N; j++) {
                    board[i][j] = Integer.parseInt(st.nextToken());
                    if (board[i][j] == 1)
                        house_cnt++;
                }
            }

        res = 0;
        int K = 1;

        while (true){
            if ((house_cnt * M) - (K * K + (K - 1) * (K - 1)) < 0)
                break;
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    res = Math.max(res,bfs(i,j,K));
                }
            }
            K++;
        }
            System.out.println("#"+tc+" "+res);

        }

    }

    public static int bfs(int r, int c,int k){
        int house = 0;

        boolean[][] visited = new boolean[N][N];
        Queue<int[]> queue = new ArrayDeque<>();
        queue.add(new int[]{r,c,0});
        visited[r][c] = true;

        if (board[r][c] == 1)
            house++;

        while(!queue.isEmpty()){
            int[] poll_data = queue.poll();
            int x = poll_data[0];
            int y = poll_data[1];
            int length = poll_data[2];
            if (length == k-1){
                if ((house*M) - (k * k + (k - 1) * (k - 1)) < 0)
                    return 0;
                else
                    return house;
            }
            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];
                if (nx<0 || ny<0 || nx>=N || ny>=N)
                    continue;
                if (!visited[nx][ny]){
                    if (board[nx][ny] == 1)
                        house++;
                    visited[nx][ny] = true;
                    queue.add(new int[]{nx,ny,length+1});
                }
            }
        }
        return 0;
    }





}

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

백준 2631 줄세우기(LIS, DP)  (1) 2022.10.18
땅지원의 A형 대비 기출 분석  (0) 2022.10.13
SWEA 4008 숫자만들기(DFS)  (0) 2022.10.12
백준 2056 작업(위상정렬, DP) ★★  (0) 2022.10.07
SWEA 7793 오! 나의 여신님 (BFS)  (1) 2022.10.06
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • 백준 2631 줄세우기(LIS, DP)
    • 땅지원의 A형 대비 기출 분석
    • SWEA 4008 숫자만들기(DFS)
    • 백준 2056 작업(위상정렬, DP) ★★
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바

    단축키

    내 블로그

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

    블로그 게시글

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

    모든 영역

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

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