반응형
리뷰1
브루트포스 알고리즘을 통한 풀이
문제 풀이
- n * n 크기의 배열을 전체 탐색해 주었다.
- 우선 가로의 경우 (i, j) 인덱스의 요소가 1일 경우 temp1를 1 올려준다. 0일 경우 현재 temp1에 저장된 값이 k와 동일하다면 cnt를 1올려준다. 이후 temp1을 0으로 초기화
- 세로의 경우 (j, i) 인덱스의 요소가 1일 경우 temp2를 증가, 0일 경우 상동
- 마지막에 0을 만나지 않은 케이스가 있을 수도 있으므로 for문이 끝난 후 해당 작업을 한번 더 실행해 준다.
- 각 테스트 케이스마다 케이스 번호와 cnt값 출력
참고 사항
temp가 정확히 k와 동일할때만 cnt를 추가해 주어야 한다.
정답 코드
파이썬
t = int(input())
for c in range(1, t + 1):
n, k = map(int, input().split())
lst = [list(map(int, input().split())) for _ in range(n)]
cnt = 0
for i in range(n):
temp1 = 0
temp2 = 0
for j in range(n):
if lst[i][j] == 1:
temp1 += 1
else:
if temp1 == k:
cnt += 1
temp1 = 0
if lst[j][i] == 1:
temp2 += 1
else:
if temp2 == k:
cnt += 1
temp2 = 0
if temp1 == k:
cnt += 1
if temp2 == k:
cnt += 1
print(f'#{c} {cnt}')
C++
#include <iostream>
#include <vector>
using namespace std;
int main() {
int t, n, k, c, i, j, cnt, temp1, temp2;
cin >> t;
for (c = 1; c <= t; c++) {
cin >> n >> k;
vector<vector<int>> lst(n, vector<int>(n));
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
cin >> lst[i][j];
}
}
cnt = 0;
for (i = 0; i < n; i++) {
temp1 = 0;
temp2 = 0;
for (j = 0; j < n; j++) {
if (lst[i][j]) temp1++;
else {
if (temp1 == k) cnt++;
temp1 = 0;
}
if (lst[j][i]) temp2++;
else {
if (temp2 == k) cnt++;
temp2 = 0;
}
}
if (temp1 == k) cnt++;
if (temp2 == k) cnt++;
}
cout << "#" << c << " " << cnt << "\n";
}
}
728x90
반응형
'알고리즘 공부 > 파이썬(Python)' 카테고리의 다른 글
백준 1697번 숨바꼭질 파이썬 (0) | 2024.07.15 |
---|---|
백준 1012번 유기농 배추 파이썬 (1) | 2024.07.15 |
백준 1213번 팰린드롬 만들기 파이썬 (0) | 2024.07.12 |
백준 1120번 문자열 파이썬 (0) | 2024.07.12 |
백준 2635번 수 이어가기 파이썬 (0) | 2024.07.11 |