본문 바로가기

백준

18248 제야의 종

 

엇 지금 보니 틀왜맞 같다

나는 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