17144. 미세먼지 안녕! (Java)

2023. 10. 11. 11:04·Algorithm & Data Structures/BOJ

위와 같은 시뮬레이션 문제였으며, 
이문제는 위와 같이 순서가 모두 주어져 있어 함수로 구현만 하면 되는 문제였다.

공기청정기 작동 부분이 꽤 시간이 걸렸다.

package BOJ;

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


public class Main{
	
	static int[][] map, copy;
	static int count = 0, R, C, T, answer=0;
	static int[] dx = {-1,0,1,0}, xy;
	static int[] dy = {0,1,0,-1};
	static int[] dx1 = {1,0,-1,0};
	static int[] dy1 = {0,1,0,-1};
	
	private static void Diffusion() {
		copy = new int[R][C];
		for(int i = 0 ; i < R ; i++) {
			for(int j = 0 ; j < C ; j++){
				if(map[i][j]!=-1 && map[i][j]!=0) {
					int ck = 0;
					for(int d = 0 ; d < 4 ; d++) {
						int xd=i+dx[d];
						int yd=j+dy[d];
						if(xd>=0 && xd<R && yd>=0 && yd<C && map[xd][yd]!=-1) {
							ck++;
							copy[xd][yd]+=map[i][j]/5;
						}
					}
					copy[i][j]+=map[i][j]-(ck*(map[i][j]/5));
				}
			}
		}
		copy[xy[0]][xy[1]]=-1;
		copy[xy[2]][xy[3]]=-1;
		for(int i = 0 ; i < R ; i++) {
			map[i] = copy[i].clone();
		}
	}
	
	private static void AirCleaner() {
		int AirX=xy[0]-1, AirY=xy[1],d=0;
		while(true) {
			if(AirX==xy[0] && AirY==xy[1]+1) break;
			int a = AirX+dx[d];
			int b = AirY+dy[d];
			if(a>=0 && b>=0 && a<=xy[0] && b<C) {
				map[AirX][AirY] = map[a][b];
				AirX=a;
				AirY=b;
			}
			else {
				d++;
				continue;
			}
		}
		
		d=0;
		AirX=xy[2]+1;
		AirY=xy[3];
		while(true) {
			if(AirX==xy[2] && AirY==xy[3]+1) break;
			int a = AirX+dx1[d];
			int b = AirY+dy1[d];
			if(a>=xy[2] && b>=0 && a<R && b<C) {
				map[AirX][AirY] = map[a][b];
				AirX=a;
				AirY=b;
			}
			else {
				d++;
				continue;
			}
		}
		map[xy[0]][xy[1]+1]=0;
		map[xy[2]][xy[3]+1]=0;
	}

	private static void Rutine() {
		if(T==count) {
			answer = 0;
			for(int i = 0 ; i < R ; i++) {
				for(int j = 0 ; j < C ; j++){
					if(map[i][j]!=-1) {
						answer+=map[i][j];
					}
				}
			}
			System.out.println(answer);
			return;
		}
		Diffusion();
		AirCleaner();
		count++;
		Rutine();
	}
	
	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());
		T = Integer.parseInt(st.nextToken());
		map = new int[R][C];
		xy = new int[4];
		int size =0;
		for(int i = 0 ; i < R ; i++) {
			st = new StringTokenizer(br.readLine());
			for(int j = 0 ; j < C ; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
				if(map[i][j]==-1) {
					xy[size++]=i;
					xy[size++]=j;
				}
			}
		}
		Rutine();
	}
}

'Algorithm & Data Structures > BOJ' 카테고리의 다른 글

13549. 숨바꼭질3 (Java)  (0) 2023.10.17
2206. 벽부수고 이동하기 (Java)  (0) 2023.10.16
11404. 플로이드 (Java)  (0) 2023.10.12
9465. 스티커 (Java)  (1) 2023.10.12
4485. 녹색 옷을 입은 애가 젤다지? (Java)  (1) 2023.10.11
'Algorithm & Data Structures/BOJ' 카테고리의 다른 글
  • 2206. 벽부수고 이동하기 (Java)
  • 11404. 플로이드 (Java)
  • 9465. 스티커 (Java)
  • 4485. 녹색 옷을 입은 애가 젤다지? (Java)
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (329) N
      • Algorithm & Data Structures (249) N
        • BOJ (107) N
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (27)
        • SQL (21)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    전위순회
    동적계획법
    자바
    경로압축
    binarySearch
    유니온파인드
    이분탐색
    백트래킹
    algorithm
    프로그래머스
    Union-Find
    SQL
    dfs
    PriorityQueue
    다익스트라
    투포인터
    후위순회
    BFS
    골드
    알고리즘
    programmers
    DynamicProgramming
    baekjoon
    dp
    스택
    백준
    Java
    구현
    Stack
    Dijkstra
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
17144. 미세먼지 안녕! (Java)
상단으로

티스토리툴바