-
[BOJ] 11509 : 풍선 맞추기
11509 : 풍선 맞추기 풀이 높이 a의 풍선을 볼 때, a+1 높이에서 날아오는 화살이 있는지 검사해주자! 코드 #include <iostream> using namespace std; int n, a, i, ans, cnt[1000001]; int main() { std::ios_base::sync_with_stdio(false); cin >> n; for (i = 0; i < n; i++) { cin >> a; if (!cnt[a+1]) cnt[a]++, ans++; else cnt[a+1]--, cnt[a]++; } cout << ans; return 0; } 아무말 백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge
-
[BOJ] 2501 : 약수 구하기
2501 : 약수 구하기 풀이 ㅎㅎ 코드 #include <stdio.h> int main() { int n, k, cnt=0; scanf("%d %d",&n,&k); for(int i=1;i<=n;i++) { if (!(n%i)) cnt++; if (cnt == k) { printf("%d", i); return 0; } } puts("0"); return 0; } 아무말 백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이
-
[BOJ] 11508 : 2+1 세일
11508 : 2+1 세일 풀이 ㅎㅎ 코드 #include <stdio.h> #include <algorithm> int main() { int n, i, sum = 0, c[100001]; scanf("%d", &n); for (i = 0; i < n; i++) scanf("%d", &c[i]), sum += c[i]; std::sort(c, c + n); for (i = n - 3; i >= 0; i -= 3) sum -= c[i]; for (i = 0; i < i % 3; i++) sum -= c[i]; printf("%d", sum); return 0; } 아무말 백준,...
-
[BOJ] 11507 : 카드셋트
11507 : 카드셋트 풀이 ㅎㅎ 코드 #include <stdio.h> int a, b, cnt[4]; bool chk[14][4]; int main() { for (char c; ~scanf("%c%1d%1d", &c, &a, &b);) { a = a * 10 + b; switch (c) { case 'P': c = 0; break; case 'K': c = 1; break; case 'H': c = 2; break; case 'T': c = 3; } if (chk[a][c]) { puts("GRESKA"); return 0; } chk[a][c] = 1, cnt[c]++; } for (int i =...
-
[BOJ] 14438 : 수열과 쿼리 17
14438 : 수열과 쿼리 17 풀이 sqrt decomposition을 이용해서 풀었다. 물론 segment tree를 이용하면 훨씬 더 빠르다. 코드 #include <stdio.h> #include <math.h> #include <algorithm> using namespace std; int n, m, sqr, a[100001], bkt[100001]; void upd(int i, int v) { a[i] = v, bkt[i / sqr] = 1e9 + 1e8; int tmp = i / sqr; for (int j = tmp * sqr; j < (tmp + 1) * sqr; j++) bkt[tmp] = min(bkt[tmp], a[j]); }...
-
[BOJ] 2591 : 숫자카드
2591 : 숫자카드 풀이 n-1번째 숫자와 n번째 숫자로 만든 값이 10~34면 dp[n-2]를 플러스 n번째 숫자가 0보다 크면(단독으로 숫자를 구성할 수 있으면) dp[n-1]을 플러스 코드 #include <stdio.h> int i, a[44], dp[44]; int main() { dp[1] = 1; for (i = 2; ~scanf("%1d", &a[i]); i++) { if (a[i]) dp[i] += dp[i - 1]; if (a[i] + a[i - 1] * 10 > 9 && a[i] + a[i - 1] * 10 < 35) dp[i] += dp[i -...
-
[BOJ] 14572 : 스터디 그룹
14572 : 스터디 그룹 풀이 학생들이 아는 모든 알고리즘의 수는 bit OR 연산과 같다. 이는 항상 같거나 증가한다. 모든 학생들이 아는 알고리즘의 수는 bit AND 연산과 같다. 이는 항상 같거나 감소한다. 따라서 누구는 빼고 누구는 넣고 할 것 없이 능력치 조건을 만족하는 범위 내의 모든 학생들을 선택해도 된다. 학생들을 능력치를 기준으로 정렬한 다음, 투 포인터를 사용하면 쉽게 답을 찾을 수 있다. 코드 #include <stdio.h> #include <algorithm> using namespace std; const int n_ = 1e5 +...
-
[BOJ] 14571 : 모래시계
14571 : 모래시계 풀이 임의의 두 인접한 사이클은 하나 또는 두개의 노드를 공유할 수 있으므로 두 경우의 수를 모두 구해서 겹치는 경우를 제거하자 컴비네이션으로 구하면 쉽게 구할 수 있다. 코드 #include <stdio.h> #include <vector> using namespace std; typedef long long ll; const int n_ = 200; int n, m, one[n_], two[n_][n_]; bool gph[n_][n_]; int main() { scanf("%d %d", &n, &m); for (int i = 0; i < m; i++) { int u, v; scanf("%d %d",...
-
[BOJ] 14570 : 나무 위의 구슬
14570 : 나무 위의 구슬 풀이 문제의 조건을 그대로 가져다 써보자. 모든 노드에 대해, 왼쪽 구슬의 수가 오른쪽 구슬의 수보다 크거나 같다. n개의 구슬 중 n/2+n%2개는 왼쪽, n/2개는 오른쪽으로 떨어지게 된다. 종단 노드를 만날 때 까지 돌려보자~~ 코드 #include <stdio.h> struct hello { int l, r; } t[200001]; int main() { int n; long long k; scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d %d", &t[i].l, &t[i].r); scanf("%lld", &k); int cur...
-
[BOJ] 14569 : 시간표 짜기
14569 : 시간표 짜기 풀이 모든 경우를 다 돌려보면 된다. bit를 사용하면 편하게 짤 수 있다. 코드 #include <stdio.h> typedef unsigned long long ull; ull t[1001]; int main() { int n, m, k; scanf("%d", &n); for (int i = 0; i < n; i++) { int k, a; scanf("%d", &k); for (int j = 0; j < k; j++) scanf("%d", &a), t[i] |= ((ull)1 << a); } scanf("%d", &m); for (int i = 0; i...