https://www.acmicpc.net/problem/29700
문제
도은이는 동아리 문화의 날을 맞이하여 동아리원들과 함께 좌석이 행 열의 직사각형 모양으로 배치되어 있는 영화관에서 영화를 보기로 했다. 도은이는 동아리원의 유대감을 중요하게 생각하기 때문에 이미 예매가 완료된 좌석을 피해 동아리원들이 모두 가로로 이어서 앉을 수 있도록 자리를 예매하고 싶어 한다. 도은이를 도와 모든 동아리원들이 가로로 이어서 앉을 수 있도록 예매하는 경우의 수는 총 몇 가지가 있을지 구해보자. 단, 예매한 좌석은 동일하지만, 각 사람이 앉는 위치만 바뀌는 경우는 한 가지로 본다.
입력
첫째 줄에 영화관 세로줄의 개수 (1≤N≤1000)과 가로줄의 개수 (1≤M≤5000), 영화를 관람할 동아리원의 수 (1≤K≤10)가 주어진다.
둘째 줄부터 개의 줄에 걸쳐 그중 번째 줄에는 번째 열의 좌석 예매 현황이 길이 인 문자열 s 로 주어진다. 의 번째 문자는 열 번째 좌석의 예매 현황을 나타내는데, 이 문자가 ' '이라면 예매 가능한 빈 좌석을, 이 문자가 ' '이라면 예매가 완료되어 예매가 불가능한 좌석을 나타낸다.
출력
동아리원들이 모두 가로로 이어서 앉을 수 있도록 영화를 예매하는 경우의 수를 출력한다. 단, 문제에서 주어진 조건에 맞게 영화를 예매할 수 있는 방법이 없다면 0을 출력한다.
예제 입력 1 복사
3 5 3
11000
01010
10000
예제 출력 1 복사
3
예제 입력 2 복사
3 4 3
1101
1001
0101
예제 출력 2 복사
0
문제풀이(1)
N x M의 영화관 자리에서 이미 완료가 된 자리를 제외한 빈자리를 동아리원들이 가로로 연속되게 앉는 방법의 개수를 구하는 문제이다.
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = require("fs").readFileSync(filePath).toString().trim().split("\n");
const [N, M, K] = input.shift().split(" ").map(Number);
let answer = 0;
for (let i = 0; i < N; i++) {
for (let j = 0; j <= M - K; j++) {
const seatList = input[i].slice(j, K + j).split("");
if (seatList.filter((el) => el === "0").length === K) {
answer++;
}
}
}
console.log(answer);
'Algorithm' 카테고리의 다른 글
[Baekjoon]1590번 캠프가는 영식 - Javascript (0) | 2024.02.23 |
---|---|
[Baekjoon]14381번 숫자세는 양 (Small) - Javascript (0) | 2024.02.22 |
[Baekjoon]20363번 당근 키우기 - Javascript (0) | 2024.02.19 |
[Baekjoon]12927번 배수 스위치 - Javascript (0) | 2024.02.16 |
[Baekjoon]9575번 행운의 수 - Javascript (0) | 2024.02.15 |