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
- 레드아보
- C++
- 투포인터 #백준 #boj #20922 #22862
- 16202
- 22869
- 백준 #다익스트라 #dijkstra #9370 #c++
- backtracking #codetree #디버깅 #삼성코테
- hcpc
- graph #최단경로
- 사이클 없는 그래프
- 20117
- 1174
- 줄어드는수
- 3D #Reconstruction #computer #vision #volume #metric #tsdf #kinect #fusion
- 3343
- 호반우 상인
- graph
- 코딩
- c++ #boj #
- N번째큰수
- LIS #가장긴증가하는부분수열 #
- 30870
- 백준
- c++ #입출력 #속도 #ios #sync_with_stdio #cin #cout #tie
- 진법변환 #2to10 #10to2 #이진법 #십진법 #변환 #bitset #c++
- 쌤쌤쌤
- 이분탐색 #dp #11053
- boj #백준
- 최소 #공배수 #최대 #공약수 #유클리드 #호제법 #lcm #gcd #c++ #boj #3343 #백준 #장미
- BOJ
Archives
- Today
- Total
hyunjin
[C++][BOJ 1080 행렬] 그리디 본문
728x90
문제 풀이
문제를 처음에 딱 읽고 이해 바로 못했다.
애해한 부분을 다른 분들 설명 보며 조건에 대해 확실히 이해했다.
- 3X3의 변환 행렬은 크기가 고정되어 있고,
- 주어진 행렬 안에만 적용된다. (3X3 필터가 주어진 행렬 내부로만 슬라이딩 가능하단 의미)
따라서 먼저 주어진 행렬의 크기가 3,3 이상인지 확인하고 두 갈래로 진행한다.
1. 3X3 미만이라면 두 행렬 바로 비교
2. 3X3 이상이라면 0~n-3, 0~k-3 까지 돌며 필터 적용하며 같은지 확인(주의할 점은 전체 다 돌린다음 같은지 확인이 아니라 필터 적용할 때마다 확인)
소스 코드
#include <bits/stdc++.h>
#define MAX 50
using namespace std;
int n,k,ans=0;
int A[MAX][MAX],B[MAX][MAX];
void InvertMatrix(int y,int x ){
for(int dy = 0 ; dy < 3;dy++){
for(int dx = 0 ; dx<3;dx++){
A[y+dy][x+dx] = 1-A[y+dy][x+dx];
}
}
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
bool isSame;
cin>>n>>k;
for(int i = 0 ; i<n ; i++){
string line;
cin >>line;
for(int j = 0 ;j<k;j++){
A[i][j] = line[j] -'0';
}
}
for(int i = 0 ; i<n ; i++){
string line;
cin >>line;
for(int j = 0 ;j<k;j++){
B[i][j] = line[j] -'0';
}
}
//3x3 이상
if(n>=3 &&k>=3){
for(int i =0 ;i < n-2;i++){
for(int j = 0 ; j < k-2 ;j++){
if(A[i][j] != B[i][j]) {
InvertMatrix(i,j);
ans++;
}
}
}
}
//같은지 확인
for(int i = 0 ; i < n ; i++){
for(int j = 0 ;j<k;j++){
if(B[i][j] != A[i][j] ){
cout<<"-1";
return 0;
}
}
}
cout<<ans;
}
숫자 하나 하나 입력 받으면 시간 초과될까봐 string으로 한번에 받음.
참고
https://jaimemin.tistory.com/728
https://while-programming.tistory.com/33
728x90
'알고리즘 연습 > 백준' 카테고리의 다른 글
[C++][BOJ 12886 돌그룹] (0) | 2021.07.27 |
---|---|
[C++][BOJ 11000 강의실 배정]그리디,정렬,우선순위큐 (0) | 2021.07.26 |
[C++][BOJ16953,A → B] DFS,BFS,그리디 (0) | 2021.07.20 |
[C++][BOJ 11497/통나무 건너뛰기] 그리디, 정렬 (0) | 2021.07.19 |
[C++][BOJ1541-잃어버린 괄호] 그리디,파싱,문자열,수학 (0) | 2021.07.10 |