본문 바로가기

온라인저지144

[BOJ] 2442번: 별찍기 - 5 https://www.acmicpc.net/problem/2442 재귀 #include int N; void PrintBlank(int n) { if (n == 0) return; printf(" "); PrintBlank(n - 1); } void PrintAsterisk(int n) { if (n == 0) return; printf("*"); PrintAsterisk(n - 1); } void Star(int n) { if (n == N + 1) return; PrintBlank(N - n); PrintAsterisk(2 * n - 1); puts(""); Star(n + 1); } int main() { scanf("%d", &N); Star(1); return 0; } 반복문 #include i.. 2018. 7. 26.
[BOJ] 1987번: 알파벳 https://www.acmicpc.net/problem/1987예전에 풀었는데 놀랍게도 풀이를 적지 않았나 보다..DFS에 백트래킹을 섞어주면 된다.12345678910111213141516171819202122232425262728293031#include char board[21][21];bool al[26];int R, C, count = -987654321; const int dx[] = { -1, 1, 0, 0 }, dy[] = { 0, 0, -1, 1 }; bool is_safe(int y, int x) { return (0 2018. 7. 26.
[BOJ] 3034번: 앵그리 창영 https://www.acmicpc.net/problem/3034직사각형에서 대각으로 눕는게 가장 길 것이다. 그래서 피타고라스의 정리를 이용하면 된다.123456789101112131415#include int main(){ int N, W, H; scanf("%d %d %d", &N, &W, &H); while (N--) { int a; scanf("%d", &a); if (W * W + H * H >= a * a) printf("DA\n"); else printf("NE\n"); } return 0;} 2018. 7. 26.
[BOJ] 3035번: 스캐너 https://www.acmicpc.net/problem/3035아래 처럼 for문을 여러번 돌릴 수도 있는데1234567891011121314151617#include int main(){ int R, C, ZR, ZC; char a[51][51]; scanf("%d %d %d %d", &R, &C, &ZR, &ZC); for (int i = 0; i 2018. 7. 26.
[BOJ] 3036번: 링 https://www.acmicpc.net/problem/30361번 링의 반지름이 R1이라면 기약분수로 R1/r 들을 출력하면 된다.소스코드123456789101112131415#include inline int gcd(int a, int b) { return b ? gcd(b, a % b) : a; } int main(){ int n, first; scanf("%d %d", &n, &first); for (int i = 0, a; i 2018. 7. 26.
[BOJ] 14888번: 연산자 끼워넣기 https://www.acmicpc.net/problem/14888 n 2018. 7. 26.
[BOJ] 1182번: 부분집합의 합 https://www.acmicpc.net/problem/1182모든 경우를 다 탐색하면 된다. 재귀 호출을 통해 풀 수도 있고 n이 20으로 작기 때문에 비트마스크를 이용해서 해결할 수 있다.재귀 호출을 통해 문제를 푸는 경우 -> 현재 이 인덱스의 값을 더하거나 안 더하거나(인덱스만 증가시키거나)로 전체를 탐색할 수 있다. 정말 뻘짓을 많이 해서 친구의 도움을 많이 받았는데 연습 밖에는 답이 없는 듯하다. 소스코드비트 마스크12345678910111213141516#include int main(){ int N, S, arr[20], count = 0; scanf("%d%d", &N, &S); for (int i = 0; i 2018. 7. 26.
[BOJ] 14650번: 걷다보니 신천역 삼 (Small) 14650번: 걷다보니 신천역 삼 (Small) 14650번: 걷다보니 신천역 삼 (Small) 욱제는 ‘삼’이란 음절을 참 좋아한다. 인삼, 홍삼, 해삼, 삼성, 이춘삼(李春森), 삼식이, 삼시세끼, ㄴㄴ 그거 안 삼, 삼과 죽음, 알았삼, 금강삼도 식후경, 걷다보니 신천역 삼, 그리고 특히 일이삼을 좋아한다. 그래서 욱제는 3을 가지고 놀아보기로 했삼. 3개 숫자(0, 1, 2)만 가지고 N자리 3의 배수를 만들어 보삼. 만드는 배수는 자연수 이삼. 0으로 시작하는 수는 만들 수 없는 수 이삼. 3의 배수가 몇 개나 나올 수 있삼? www.acmicpc.net N의 최대 크기가 9이기 때문에 brute force를 해도 되지만 간단한 dp 문제로 풀 수 있다. 참고: 14651번: 걷다보니 신천역 삼.. 2018. 7. 19.
[BOJ] 14652번: 나는 행복합니다~ 14652번: 나는 행복합니다~ 다행히 관중석이 직사각형이라 나누기와 나머지 연산을 잘 써주면 된다. 코드 #include int main() { int n, m, k; scanf("%d %d %d", &n, &m, &k); printf("%d %d", k / m, k % m); return 0; } 2018. 7. 19.
[BOJ] 1011번: Fly me to the Alpha Centauri 1011번: Fly me to the Alpha Centauri 이동 횟수와 거리 간의 관계가 있다. 이동 횟수 거리 표시 이동 가능 거리 1 1 1 2 1 1 2 3 1 2 1 3 - 4 4 1 2 2 1 5 - 6 5 1 2 3 2 1 7 - 9 6 1 2 3 3 2 1 10 - 12 예를 들어 우리가 5만큼의 거리를 간다고 하자. 그렇다면 우리는 4번만 이동하면 된다. 규칙을 잘 찾아서 구현을 해주면 완성이다. 코드 #include int t; int main() { scanf("%d", &t); while (t--) { int d, a; // departure, arrival; scanf("%d %d", &d, &a); for (int i = 1;; ++i) if (a - d 2018. 7. 19.
[BOJ] 14651번: 걷다보니 신천역 삼 (Large) 14651번: 걷다보니 신천역 삼 (Large) 이기 때문에 처음에는 코드를 이렇게 짰다. #include long long n, dp[33334][3]; const int R = 1e9 + 9; int main() { scanf("%lld", &n); dp[2][0] = 0, dp[2][1] = dp[2][2] = 1; for (int i = 3; i 2018. 7. 19.
[BOJ] 1193번: 분수찾기 1193번: 분수찾기 많이 비효율적인 코드이긴 한데... 내일 다시 풀어보도록 하자. 코드 #include using namespace std; int main() { ios_base::sync_with_stdio(false), cin.sync_with_stdio(false); int n, i; cin >> n; for (i = 1; (i * i + i) / 2 < n; ++i) { } int tmp = ((i - 1) * (i)) / 2, s, f; if (i & 1) { s = i, f = 1; while (tmp != n - 1) s--, f++, tmp++; } else { s = 1, f = i; while (tmp != n - 1) s++, f--, tmp++; } cout 2018. 7. 19.
[BOJ] 3053번: 택시 기하학 3053번: 택시 기하학 유클리드 기하학에서 원의 넓이: 택시 기하학에서 원은 정사각형 꼴이다. 그래서 한 변의 길이는 이고 따라서 넓이는 코드 #include #define _USE_MATH_DEFINES #include int main() { double R; scanf("%lf", &R); printf("%.6lf\n%.6lf", R * R * M_PI, R * R * 2.0); return 0; } 2018. 7. 19.
[BOJ] 3052번: 나머지 3052번: 나머지 배열을 써서 확인하자. 코드 #include bool chk[42]; int main() { int count = 0; for (int i = 0, a; i < 10; ++i) { scanf("%d", &a); if (!chk[a % 42]) ++count; chk[a % 42] = true; } printf("%d\n", count); return 0; } 2018. 7. 19.
[BOJ] 3054번: 피터팬 프레임 3054번: 피터팬 프레임 배열로 할 수도 있고 직접 출력을 할 수도 있지만 나는 직접 출력하는 방식을 택했다. 만약 배열로 한다면 세로로 보는 것이 편할 것 같다는 생각이다. 풀이 (1번 줄, 5번 줄), (2번 줄, 3번 줄)은 동일하다. 가로길이: 입력된 문자열 길이 * 4 + 1 세로 길이: 5 1번 줄: '#' | '*'이 나오는 위치: 3 7 11 ··· -> i % 4 == 3 *이 나오는 위치: 11 23 ··· -> i % 12 == 11 나머지는 '.'출력 2번 줄: '#' | '*'이 나오는 위치: 짝수 -> i % 2 == 0 '*'이 나오는 위치: 10 12 22 24 ··· -> i % 12 == 10 | i % 12 == 0 나머지는 '.' 출력 가운데: 얘는 까다로워서 문자열.. 2018. 7. 19.