알고리즘 공부/파이썬(Python)

SWEA 1979번 D2 어디에 단어가 들어갈 수 있을까 파이썬, C++

마달랭 2024. 7. 14. 22:21
반응형

리뷰1

브루트포스 알고리즘을 통한 풀이

문제 풀이

  1. n * n 크기의 배열을 전체 탐색해 주었다.
  2. 우선 가로의 경우 (i, j) 인덱스의 요소가 1일 경우 temp1를 1 올려준다. 0일 경우 현재 temp1에 저장된 값이 k와 동일하다면 cnt를 1올려준다. 이후 temp1을 0으로 초기화
  3. 세로의 경우 (j, i) 인덱스의 요소가 1일 경우 temp2를 증가, 0일 경우 상동
  4. 마지막에 0을 만나지 않은 케이스가 있을 수도 있으므로 for문이 끝난 후 해당 작업을 한번 더 실행해 준다.
  5. 각 테스트 케이스마다 케이스 번호와 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
반응형