알고리즘 단련장/소프티어

[소프티어] 나무 공격 자바 풀이 레벨2

snapcoder 2024. 7. 19. 18:19
728x90
반응형
SMALL

[소프티어] 나무 공격 자바 풀이 레벨2

 

 

링크

https://softeer.ai/practice/9657

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

 

 

 

문제 스펙

오늘 추가된 뜨끈한 문제라 그런지

제출5명, 참가자5명, 정답률100% 이다.

 

 

 

 

 

 

 

 

표장같은걸 던지는 것 같다

 

 

핵심 설명

- 숲을 나타내는 map이라는 2차원 배열 저장

- 5개의 투사체 경계를 알려줄 range 배열 저장

- 공격 시작시 투사체 1차원 배열 생성 (투사체 크기 5사이즈)

- 투사체 던질때, 반복문 변수 체크 (n먼저인지 m먼저인지)

- 환경파괴범도 있고 && 투사체도 있으면 then 둘다 없애주기

- 최종출력

난 투사체를 불덩이라고 상상했다.

 

 

 

정답 코드

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

public class Main {
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        // int n = Integer.parseInt(br.readLine());

        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        int sum = 0;
        int map[][] = new int[n][m];
        for(int i=0; i<n; i++){
            st = new StringTokenizer(br.readLine());
            for(int j=0; j<m; j++){
                int bit = Integer.parseInt(st.nextToken());
                map[i][j] = bit;
                if(bit == 1){
                    sum++;
                }
            }
        }
        
        int range[][] = new int[2][2];
        for(int i=0; i<2; i++){
            st = new StringTokenizer(br.readLine());
            for(int j=0; j<2; j++){
                int bit = Integer.parseInt(st.nextToken());
                range[i][j] = bit-1;
            }
        }

        // attack
        for(int i=0; i<2; i++){
            // 던질 불덩이 일자로 생성하기
            int fire[] = new int[n];
            for(int j=0; j<n; j++){
                if(range[i][0] <= j && j <= range[i][1]){
                    fire[j] = 1;   
                }else{
                    fire[j] = 0;
                }
            }

            // 불덩이 던지기
            for(int y=0; y<m; y++){
                for(int x=0; x<n; x++){
                    if(map[x][y] == 1 && fire[x] == 1){
                        map[x][y] = 0;                        
                        fire[x] = 0;
                        sum--;
                    }
                }
            }
        }
        bw.write(String.valueOf(sum));
        
        // bw.write(String.valueOf(dap));
        bw.close();
    }
}

 

 

 

 

728x90
반응형
LIST