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 | 31 |
Tags
- React.StrictMode
- c++
- 이중지도
- JS
- 최소스패닝트리
- 타겟넘버
- 두원사이의정수쌍
- 백준 알고리즘
- 알고리즘 문제풀이
- 우박수열정적분
- solved.ac플래티넘
- Lv2
- Lv3
- 알고리즘문제풀이
- solved.ac골드
- [pccp 기출문제]
- 과제진행하기
- 5강클로저
- 비트마스크
- 코어자바스크립트
- 백준알고리즘
- DP
- 2023카카오블라인드코테
- 지도 여러개
- JS스터디
- pccp기출문제
- 정렬
- 프로그래머스
- div2개
- 스택
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