Softeer

[C++, Python] Softeer Lv2 나무공격

MINU.SHINNNN 2024. 8. 1. 01:11

https://softeer.ai/practice/9657

 

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

 

softeer.ai

풀이

환경파괴범에 대해 나무 공격을 진행하려 합니다. 환경 파괴범 위치 정보는 n, m 크기 격자에서 0, 1로 주어집니다. 공격은 2번 진행되며 한번 공격시 5행을 차지합니다. 공격 시작과 끝 행에 대한 정보는 l, r로 주어집니다. 

 

2차원 맵을 만들어 완전탐색을 하려 했으나,

행별로 환경 파괴범 수를 기록해두고 공격 행에 대한 정보가 주어지면 해당 행에서 빼주는 방법을 사용하면 쉽게 답을 구할 수 있습니다. 이 때, 이미 해당 행에 환경파괴범이 없다면 제외합니다.

 

C++

#include<iostream>
#include<vector>

using namespace std;

int main(int argc, char** argv)
{
    int n, m, l, r;

    cin >> n >> m;
    // 행별로 환경 파괴범 수를 기록
    
    vector<int> map(n, 0);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            int v;
            cin >> v;
            if (v == 1)
                map[i]++;
        }
    }

    for (int cnt = 0; cnt < 2; cnt++) {
        // 공격 행마다 1씩 빼주고 0이라면 제외
        cin >> l >> r;
        for (int i = l-1; i <= r-1; i++) {
            if (map[i] > 0) {
                map[i]--;
            }
        }
    }
    int answer = 0;
    for (int i = 0; i < map.size(); i++)
        answer += map[i];
    cout << answer;
   return 0;
}

 

Python

import sys

# 입력 받기
n, m = map(int, input().split())

# 행별로 환경 파괴범 수를 기록
map_ = [0] * n
for i in range(n):
    row = list(map(int, input().split()))
    map_[i] = sum(1 for v in row if v == 1)

for _ in range(2):
    # 공격 범위 입력 받기
    l, r = map(int, input().split())
    # 공격 행마다 1씩 빼주고 0이라면 제외
    for i in range(l - 1, r):
        if map_[i] > 0:
            map_[i] -= 1

answer = sum(map_)
print(answer)