본문 바로가기
반응형

컴퓨터 사이언스/BOJ42

[c++] 백준 #3020 개똥벌레 (190915) 종유석이든 석순이든 어느 위치에 있는 지는 중요하지 않기에 정렬을 한다. 이후, H개의 높이에서 다 잘라보는데 각 높이마다 부술 수 있는 것의 개수는 정렬된 배열에서 lower_bound를 이용해서 O(logN)에 구할 수 있다. 이를 이용하면 복잡도는 O(NlogN + HlogN)이 된다. #include using namespace std; #define INF 987654321 typedef long long ll; typedef pair ii; typedef tuple iii; #define pb push_back int main(){ ios::sync_with_stdio(false); cin.tie(0); int N, H; cin >> N >> H; vector gr.. 2019. 10. 8.
[c++] 백준 #1774 우주신과의 교감 (190930) 모든 노드가 연결되어 있으려면! MST!가 생각날 것이다. 각 점에 대해 N(N+1)/2개의 간선의 거리를 다 구해준다. N #include using namespace std; #define INF 987654321 typedef long long ll; typedef pair ii; typedef pair pll; typedef tuple iii; vector points; #define N_MAX 1010 int p[N_MAX]; int n_elem[N_MAX]; double ans = 0.0; int my_find(int a){ if (p[a] == a) return a; else return p[a] = my_find(p[a]); } void my_union(int a, int b,.. 2019. 10. 8.
[c++] 백준 #12842 튀김소보루 (190908) 튀김소보루의 갯수가 주어질 때 마지막에 먹은 게 누구인지 맞추는 문제이다. 나는 binary search로 풀었다. 일단 t초동안 먹을 수 있는 튀김소보루의 수를 이분탐색을 통해서 구해서 t 값을 얻은 후, t-1초동안 먹을 수 있는 소보루 갯수에서 t초까지 하나씩 더해가면서 누가 마지막에 먹었는 지 확인하면 된다. ** 주의할 점 : 먹는 시간은 0초부터(not 1초) 계산된다는 점이다. 계산 식 세울 때 주의. #include using namespace std; #define INF 987654321 typedef long long ll; typedef pair ii; typedef tuple iii; #define pb push_back ll N, S, M; vecto.. 2019. 10. 8.
[c++] 백준 #3163 떨어지는 개미 (190915) 약간의 관찰이 필요한 문제이다. 개미가 서로 부딫히면 방향을 바꾼다고 해서 겁먹고 시뮬레이션처럼 구하면 시간초과이다. (물론 난 그러지 않았다.) 개미가 서로 부딫히면 방향을 바꾼다는 의미는 부딫힌 개미와 떨어지는 데 걸리는 시간이 swap된다는 것이다. 그래서 이렇게 swap이 반복되고 나면(약간의 손계산으로 직접 해보면 알 수 있다) 최종적으로, 각 개미의 방향은 ← ← ← ← → → → 이런식으로 되서 다리 밖으로 떨어질 것이다. swap되는 시간도 고려해보면 최종적으로 각 개미가 떨어지는 데 걸리는 시간은 정렬된 배열의 무언가와 닮아 있는데, -2 -3 -4 -5 7 3 2 1 이런 식으로 음수의 거리 값은 오름차순, 양수의 거리 값은 내림차순으로 정렬한 꼴로 정렬이 된다. 이제 각 .. 2019. 10. 8.
반응형