Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- KAKAO
- 완전탐색
- 백준
- priority_queue
- Sort
- 레벨2
- 모의SW역량테스트
- 레벨3
- find
- C++
- 문자열
- Set
- 이런게4문제
- 백트래킹
- 코딩스킬
- 2018
- swea
- 삼성SW역량테스트
- 시뮬레이션
- 코딩테스트
- STL
- 프로그래머스
- BFS
- 삼성SW테스트
- Map
- substr
- dfs
- 브루트포스
- 삼성
- dp
Archives
- Today
- Total
-
[프로그래머스_레벨2] 가장 큰 정사각형 찾기 본문
https://programmers.co.kr/learn/courses/30/lessons/12905#
처음에 for문으로 답을 찾으려 했다가 정확성은 맞았지만 효율성테스트에서 실패한 케이스다.
다시 문제를 분석하고 DP로 더 빠르게 풀 수 있는 것을 알게 된 뒤,
재설계해서 풀었다.
먼저 DP배열에 모두 0을 넣고, board에 1이 담겨있는 곳의 dp값을 1로 초기화 해주었다.
만약 board값을 확인하는 과정에서 1이 발견되지 않으면 0을 반환하고 종료하도록 했다. 그렇지 않은 경우 최소 1의 넓이를 가질 것이므로 answer의 초기값은 1로 설정했다. (answer은 제일 큰 정사각형의 한 변의 길이의 의미임.)
그 후, dp를 돌면서 좌상, 좌, 상 부분의 dp값을 보고 제일 작은 요소를 찾아 +1한 것이 현재 위치에서 얻을 수 있는 가장 긴 정사각형의 한 변의 길이이므로 루프를 돌며 제일 긴 길이를 answer에 담아두었다.
루프를 다 돌고 나서는 길이를 저장해둔 answer의 제곱을 반환하도록 했다.
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
|
#include <iostream>
#include <vector>
using namespace std;
int solution(vector<vector<int> > board)
{
int answer = 1;
vector<vector<int> > dp;
int row = board.size(), col = board[0].size();
bool no_one = true;
for(int r=0; r<row; r++){
for(int c=0; c<col; c++){
if(board[r][c]) {
dp[r][c] = 1;
no_one = false;
}
}
}
if(no_one) return 0;
for(int r=1; r<row; r++){
for(int c=1; c<col; c++){
if(dp[r][c] == 1){
dp[r][c] = min(dp[r-1][c], min(dp[r-1][c-1], dp[r][c-1])) + 1;
answer = (answer >= dp[r][c]) ? answer : dp[r][c];
}
}
}
answer = answer * answer;
return answer;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
'1-4. 프로그래머스' 카테고리의 다른 글
[프로그래머스_레벨2] 뉴스 클러스터링 (2018 KAKAO BLIND RECRUIT.) (0) | 2020.02.11 |
---|---|
[프로그래머스_레벨 3] 오픈채팅방(2019 KAKAO BLIND RECRUIT.) (0) | 2020.02.11 |
[프로그래머스_레벨 3] 여행 경로 (DFS) (0) | 2020.02.10 |
[프로그래머스_레벨 3] 2 x n 타일링 (0) | 2020.02.10 |
[프로그래머스] 레벨 3 - 네트워크 (0) | 2020.02.09 |
Comments