-
[BOJ] 2503 : 숫자 야구
2503 : 숫자 야구 풀이 모든 숫자랑 모든 질문을 비교 해주자. 코드 #include <stdio.h> int n, ans, a[3], b[3]; struct ABC { int num, st, ba; } qry[101]; int main() { scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d %d %d", &qry[i].num, &qry[i].st, &qry[i].ba); } for (int i = 123; i <= 987; i++) { int cnt = 0; a[0] = i/100, a[1] = i/10%10, a[2] = i%10; if (!a[1]...
-
[BOJ] 10448 : 유레카 이론
10448 : 유레카 이론 풀이 1000 이하인 삼각수를 모두 구해보자! 그러한 (1000 이하인) 삼각수의 개수가 얼마 되지 않으므로 3중 for문 돌면서 완전탐색 해주면 된다! 코드 #include <stdio.h> #include <vector> using namespace std; int tc, n, ans; vector<int> v; int main() { for (int i = 1; i*(i+1)/2 <= 1000; i++) v.push_back(i*(i+1)/2); for (scanf("%d", &tc); tc--;) { scanf("%d", &n); ans = 0; for (int i : v) for (int j : v) for (int k :...
-
[BOJ] 3085 : 사탕 게임
3085 : 사탕 게임 풀이 맵의 크기가 50*50밖에 되지 않는다 (!) 인접한 칸을 swap하는 경우도 최대 50*49*2번밖에 되지 않는다 (!!) 모든 (x, y)를 돌면서 스왑 놀이를 해보자~! 코드 #include <stdio.h> #include <algorithm> using namespace std; const int dx[] = { 0,1 }; const int dy[] = { 1,0 }; int n, ans; char a[55][55]; int check() { int ret = 1, cnt = 1; for (int i = 1; i <= n; i++) { for...
-
[BOJ] 10251 : 운전 면허 시험
10251 : 운전 면허 시험 풀이 dp[i][j][k][d] = (i, j)까지 방향을 k번 틀고 d방향에서 왔을 때의 최소 연료량 아 졸리다 자세한 풀이는 다른 블로그를 보는 게 더 좋겠다! 코드 #include <stdio.h> #include <string.h> int min(int a, int b) { return a < b ? a : b; } int n, m, l, g, dp[102][102][102][2], gas[102][102][2]; int main() { int T; for (scanf("%d", &T); T; T--) { scanf("%d %d %d %d", &n, &m, &l, &g); for...
-
[BOJ] 10252 : 그리드 그래프
10252 : 그리드 그래프 풀이 항상 사이클을 만들 수 있다. 첫 번째 행을 제외하고 ㄹ 모양으로 돌다가 마지막에 첫 번재 행으로 돌아와서 올라가주면 된다. 코드 #include <stdio.h> int main() { int tc; for (scanf("%d", &tc); tc; tc--) { int n, m, i, j; scanf("%d %d", &n, &m); puts("1"); for (i = 0; i < m; i++) printf("(%d,%d)\n", 0, i); for (i = 1; i < n; i++) { if (i % 2) for (j =...
-
[BOJ] 1520 : 내리막 길
1520 : 내리막 길 풀이 메모이제이션 하면서 탐색해주자!! 코드 #include <stdio.h> const int dx[] = { 0,1,0,-1 }; const int dy[] = { 1,0,-1,0 }; int n, m, a[505][505], d[505][505]; int dfs(int x, int y) { if (x == n && y == m) return 1; if (~d[x][y]) return d[x][y]; d[x][y] = 0; for (int i = 0; i < 4; i++) { int nx = x + dx[i], ny = y + dy[i]; if...
-
[BOJ] 2668 : 숫자고르기
2668 : 숫자고르기 풀이 사이클을 찾아주면 된다! 우아하게 코드를 작성해보자. 코드 #include <stdio.h> int n, cnt, CNT[101], a[101]; int gogo(int now, int start) { for (int i = 1; i <= n; i++) { now = a[now]; if (now == start) return (cnt++, CNT[now]++); } } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", a + i); for (int i = 1; i <= n; i++) gogo(i, i);...
-
[BOJ] 2231 : 분해합
2231 : 분해합 풀이 각 자리수의 최대값이 9이므로 [n-9*자릿수, n] 구간만 조사해도 된다! 코드 #include <stdio.h> int n, i, j, cnt, sum; int main() { scanf("%d", &n); i = n; while (i) i /= 10, cnt++; for (i = n - 9 * cnt; i < n; i++) { sum = i; for (j = i; j; j /= 10) sum += j % 10; if (sum == n) break; } printf("%d", i != n...
-
[BOJ] 2504 : 괄호의 값
2504 : 괄호의 값 풀이 뚜룹뚜빠라빠라 코드 #include <stdio.h> #include <stack> using namespace std; int sum, tmp = 1; char str[33]; stack<char> stk; int main() { scanf("%s", str + 1); for (int i = 1; str[i]; i++) { switch (str[i]) { case '(': btmp *= 2, stk.push('('); break; case '[': tmp *= 3, stk.push('['); break; case ')': if (str[i - 1] == '(') sum += tmp; if (stk.empty()) return !printf("0"); if (stk.top() == '(') stk.pop();...
-
[BOJ] 2530 : 인공지능 시계
2530 : 인공지능 시계 풀이 오.바.와.치 코드 #include <stdio.h> int main() { int a, b, c, d; scanf("%d %d %d %d", &a, &b, &c, &d); c += d; b += c / 60, c %= 60; a += b / 60, b %= 60; a %= 24; printf("%d %d %d", a, b, c); return 0; } 아무말 백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제,...