old/Algorithm
8주차 가장큰정사각형찾기/단체사진찍기/올바른괄호
hYhY1234
2020. 7. 25. 18:32
728x90
가장 큰 정사각형 찾기 문제
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
int solution(vector<vector<int>> board)
{
int answer = 1234;
vector<vector<int>> map(board.size()+1, vector<int> (board[0].size()+1, 0));
for(int i = 0; i < board.size(); i++){
for(int j = 0; j < board[0].size(); j++){
map[i+1][j+1] = board[i][j];
}
}
for(int i = 1; i <= board.size(); i++){
for(int j = 1; j <= board[0].size(); j++){
if(map[i][j] && map[i-1][j] && map[i][j-1] && map[i-1][j-1]){
int temp = map[i-1][j];
if(temp > map[i][j-1])
temp = map[i][j-1];
if(temp > map[i-1][j-1])
temp = map[i-1][j-1];
map[i][j] = temp + 1;
}
}
}
int leng = 0;
for(int i = 1; i <= board.size(); i++){
for(int j = 1; j <= board[0].size(); j++){
leng = max(leng, map[i][j]);
// cout << map[i][j] << " ";
}
// cout << "\n";
}
return leng * leng;
}
어렵다. 구현이야 괜찮은데, 이렇게도 풀수있구나하는걸 몰라서 답안을 찾아봤어야했다.
단체사진찍기
간단한 문제이나 char, int 변환을 잘못해서 한참 걸림
char n = '0' -> int n_int = n - '0'
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int solution(int n, vector<string> data) {
int answer = 0;
vector<char> arr = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
int ccc = 0;
int match['Z' + 1];
do{
for(int i = 0; i < arr.size(); i++){
match[arr[i]] = i;
}
int flag = true;
for(int i = 0; i < data.size(); i++){
string temp = data[i];
int start = match[temp[0]];
int end = match[temp[2]];
char eq = temp[3];
int n = temp[4] - '0';
int len = end - start;
if(len < 0){
len *= -1;
}
len--;
if(eq == '='){
if(len != n){
flag = false;
break;
}
}else if(eq == '>'){
if(len <= n){
flag = false;
break;
}
}else if(eq == '<'){
if(len >= n){
flag = false;
break;
}
}
}
if(flag)
answer++;
}while(next_permutation(arr.begin(), arr.end()));
return answer;
}
모든 경우의 수를 만든다.
그다음 그 경우의 수에서 각각의 문자의 위치를 확인한다. 나는 match라는 배열에 인덱스를 넣어주었다.
그리고 모든 명령에 대해서 처리
1) 시작하는 문자 start : match['A'] 이렇게 하면 'A'의 인덱스를 가져올수있다.
2) 끝나는 문자 end: 위와 같다.
3) eq: 부호
4) n: 여기서 망했다. char형과 int형의 차이를 제대로 처리안해줬다.
n = '문자형태 숫자' - '0'을해야 숫자가 된다.
5) len: 인덱스를 통해서 거리를 구해준다.
조건이 안맞으면 flag=false 처리하고 포문을 탈출한다.
올바른 괄호
#include<string>
#include <iostream>
#include <stack>
using namespace std;
bool solution(string s)
{
bool answer = true;
stack<char> st;
for(int i = 0; i < s.size(); i++){
if(s[i] == '('){
st.push(s[i]);
}else{
if(st.empty()){
return false;
}
st.pop();
}
}
if(st.empty()){
return true;
}
return false;
}
완전기초문제!
후기
이번주에는 평일에 공부를 하나도 안해서 일욜밤에 몰아서 세문제 풀었다! 꾸준히 해야하는데, 어떤때에는 주중에는 퇴근하고 코딩이 잘안된다. 그리고 이제 새로관심이 생긴분야가 있다보니, 앞으로도 꾸준히 주말에 몰아서라도 풀어야겠다. 언제한번은 대박쳐보자!