알고리즘/기타

[Cos pro 1급] 6차 문제1) 꽃피는 봄이 언제 오나요 (java)

흰싸라기 2022. 8. 25. 16:25

https://edu.goorm.io/lecture/17301/cos-pro-1급-기출문제-java

 

COS PRO 1급 기출문제 - Java - 구름EDU

YBMIT에서 시행하는 COS Pro 자격증으로 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.

edu.goorm.io

[문제]

[문제풀이 전]

핀 꽃을 저장하고 저장한 값을 통해 다음 필 꽃을 저장해 반복하는 로직을 생각했다. 

 

[문제풀이]

import java.util.*;

class Main {
    public int solution(int n, int[][] garden) { // 0 피지 않은 꽃 1 핀 꽃
 
        int answer = 0;
			  int[] dx = {1, 0, -1, 0};
			  int[] dy = {0, 1, 0, -1};
			  ArrayList<Integer> bloom = new ArrayList<>();
			  for(int i=0;i<n;i++){ // 핀 꽃 위치 저장 
					for(int j=0;j<n;j++){
						if(garden[i][j]==1)
							bloom.add(i*10+j);
					}
				}
			
			  while(!bloom.isEmpty()){
					int bn = bloom.size();
					
					for(int i=0;i<bn;i++){
						int x = bloom.get(0)/10;
						int y = bloom.get(0)%10;
						bloom.remove(0);
						
						for(int k=0;k<4;k++){
							int nx = x+dx[k]; int ny = y+dy[k];
							if(nx>=0&&nx<n&&ny>=0&&ny<n){
								if(garden[nx][ny]==0){
									bloom.add(nx*10+ny);
									garden[nx][ny]=1;
								}
							}
						}
					}
					answer++;
				}
			  
        return --answer; // 마지막 모두 1일때 -1
    }
ArrayList<Integer> bloom
  • 핀 꽃 위치를 x*10+y로 저장
  • class로 Pair 만들어 사용해도 좋지만, 한번 사용하고 코테보는 것처럼시간 체크해서 빨리 하기위해 위 방법 사용
while(!bloom.isEmpty()){}
  • 이전에 저장한 핀 꽃 위치를 하나씩 탐색
  • 저장한 위치에 따라 정원 상태 확인 후 변화가 있는 경우 위치 저장 
int answer 마지막에 다 1일때도 한번 반복문을 돌기 때문에 출력하기전에 -1