엇 지금 보니 틀왜맞 같다
나는 M번 종소리가 R이 커지는 방향으로 있다고 생각했다
그래서 정렬한 다음에 아래와 같은 케이스인지 확인하면 되겠다 생각했다
(1 아래에 0이 있는 경우)
```
101
110
111
```
아닌가?
1번 들은 사람이랑 2번 들은 사람이 있다고 했을 때 나올 수 있는건
```
10
11
```
또는
```
01
11
```
무조건 0 아래에 1이 있어야 함..
또 다른 경우를 보면
- 1번 들음, 2번 들음, 2번 들음, 6번 들음 (뒤로 갈 수록 가까움)
- 1의 개수가 각각 1, 2, 2, 6개
100000
110000
110000
111111
정렬하면 멀리 있는 사람 -> 가까이 있는 사람 순으로 정렬됨
멀리 있는 사람이 들은 건 가까이 있는 사람이 무조건 들어야 함
그래서 멀리 있는 사람 배열이 1이면 바로 아래칸도 1이어야 함
그게 아니면 멀리 있는 사람은 들었는데 가까이 있는 사람은 못 들은게 되어버림
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>
#include <math.h>
#include <sstream>
#include<cassert>
#include <climits>
#include <tuple>
#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#define MAXV 987654321
#define FOR(i, n) for(int i = 0; i < (n); ++i)
using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;
int main() {
int n, m;
scanf("%d %d", &n, &m);
vector<vector<int>> v(n, vector<int>(m));
FOR(i, n){
FOR(j, m) {
scanf("%d", &v[i][j]);
}
}
sort(all(v));
FOR(i, n-1){
FOR(j, m) {
if (v[i][j] > v[i+1][j]) {
printf("NO\n");
return 0;
}
}
}
printf("YES\n");
return 0;
}
'백준' 카테고리의 다른 글
23562 ㄷ 만들기 (1) | 2023.11.04 |
---|---|
26595 전투의 신 (1) | 2023.10.07 |
7511 소셜 네트워킹 어플리케이션 (1) | 2023.10.07 |
28176 Maximum GCD (0) | 2023.09.17 |
11607 Grid (0) | 2023.09.16 |