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)