Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 백준알고리즘
- 과제진행하기
- Lv3
- Lv2
- 이중지도
- 알고리즘문제풀이
- 알고리즘 문제풀이
- 스택
- 최소스패닝트리
- c++
- JS스터디
- 타겟넘버
- solved.ac골드
- 프로그래머스
- 우박수열정적분
- 정렬
- 백준 알고리즘
- 두원사이의정수쌍
- React.StrictMode
- 비트마스크
- 2023카카오블라인드코테
- 지도 여러개
- 코어자바스크립트
- JS
- 5강클로저
- solved.ac플래티넘
- div2개
- DP
- pccp기출문제
- [pccp 기출문제]
Archives
- Today
- Total
호지
[백준 알고리즘] 1028번 다이아몬드 광산 C++ 본문
다이아몬드 형식의 위 특성을 활용해서 ld, rd배열에 각 위치에서 최대로 뻗을 수 있는 대각선의 크기를 저장한다.
이후 ld rd의 값이 둘 다 0이 아닐때,
2~ min(ld값, rd값)의 길이(n)을 갖는 다이아몬드가 생성 가능한지 확인 한다.
다이아몬드 생성가능 여부는 왼쪽 대각선을 내렸을때 좌표의 rd값이 n이상이면서,
오른쪽 대각선을 내렸을때 좌표의 ld값이 n이상인지 확인한다.
(다이나믹 프로그래밍)
#include <iostream>
using namespace std;
int main(){
int r, c, res =0;
cin >> r >> c;
int ld[r][c], rd[r][c];
char input;
for(int i=0; i<r; i++)
for(int j=0; j<c; j++){
cin >> input;
if(input == '0'){
ld[i][j] = 0;
rd[i][j] = 0;
}
else{
ld[i][j] = 1;
rd[i][j] = 1;
}
}
for(int i=r-2; i>=0; i--){
for(int j=0; j<c; j++){
if(ld[i][j] == 1 && j!= 0){
ld[i][j] += ld[i+1][j-1];
}
if(rd[i][j] ==1 && j!= c-1){
rd[i][j] += rd[i+1][j+1];
}
}
}
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
if(ld[i][j] !=0 && rd[i][j] !=0){
res = max(res, 1);
if(ld[i][j] != 1 && rd[i][j] != 1){
int n = min(ld[i][j], rd[i][j]);
while(n > 1){
if(rd[i+n-1][j-n+1] >= n && ld[i+n-1][j+n-1]>=n){
res = max(res, n);
}
n --;
}
}
}
}
}
cout << res << endl;
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 알고리즘] 1016번 제곱 ㄴㄴ수 c++ (0) | 2022.04.05 |
---|---|
[백준 알고리즘] 1086번 박성원 c++ (0) | 2022.04.04 |
[백준 알고리즘] 1071번 소트 c++ (0) | 2022.04.01 |
[백준 알고리즘] 1050번 물약 c++ (0) | 2022.04.01 |
[백준 알고리즘] 1047번 울타리 c++ (0) | 2022.03.30 |
Comments