-
2024 - 10- 31 C++ 코딩테스트 10주완성 D+55Language Grammar/C++ 2024. 10. 31. 16:34
복습
복습을 습관화안해서 그런지 밀린 숙제들이 많다..!!
그리고 오랜만에 보니.. 로직은 기억나는데, 코드가 기억나질않는다 아무래도 내꺼가 될려면 복습은 필수인 것 같다!!
복습한 내용을 살펴보자
백준 2234 문제 - 성곽
오늘은 시간이 별로 많지않아서.. 하나밖에 못하였다.
실습코드
#include <bits/stdc++.h> using namespace std; int a[54][54],visited[54][54],N,M,cnt = 1,ret = -987654321; int dy[4] = {0,-1,0,1},dx[4] = {-1,0,1,0}; vector<int> v; int go(int y,int x) { int ret = 1; visited[y][x] = cnt; for(int i =0; i < 4; i++) { if(!(a[y][x] & (1 << i))) { int ny = y + dy[i]; int nx = x + dx[i]; if(ny < 0 || ny >= N || nx < 0 || nx >= M || visited[ny][nx]) continue; ret += go(ny,nx); } } return ret; } int main() { cin >> M >> N; for(int i =0; i < N; i++) { for(int j=0; j < M; j++) { cin >> a[i][j]; } } for(int i =0; i < N; i++) { for(int j =0; j < M; j++) { if(!visited[i][j]) { v.push_back(go(i,j)); cnt++; } } } for(int i=0; i < N; i++) { for(int j =0; j < M; j++) { if(i < N-1 && (visited[i][j] != visited[i+1][j])) ret = max(ret,v[visited[i][j]-1] + v[visited[i+1][j]-1]); if(j < M-1 && (visited[i][j] != visited[i][j+1])) ret = max(ret,v[visited[i][j] -1] + v[visited[i][j+1] -1]); } } if(ret == -987654321) return 0; else { sort(v.begin(),v.end()); cout << v.size() << endl <<v.back() << endl << ret; } }
'Language Grammar > C++' 카테고리의 다른 글
2024 - 11- 05 C++ 코딩테스트 10주완성 D+57 (0) 2024.11.06 2024 - 11- 01 C++ 코딩테스트 10주완성 D+56 (3) 2024.11.01 2024 - 10- 28 C++ 코딩테스트 10주완성 D+52 (0) 2024.10.29 2024 - 10- 25 C++ 코딩테스트 10주완성 D+51 (2) 2024.10.25 2024 - 10- 22 C++ 코딩테스트 10주완성 D+49 (1) 2024.10.22