본문 바로가기

BOJ128

[BOJ] 15904번: UCPC는 무엇의 약자일까? https://www.acmicpc.net/problem/15904 이런 문제 좀 재미있다 ㅎㅎ 공백도 받은 방법은 getline(cin, [string])이라는 것도 다시 상기시키는 좋은 계기가 되었다. #include #include using namespace std; int main() { ios_base::sync_with_stdio(false), cin.tie(0); const char al[] = {'U', 'C', 'P', 'C'}; string str; int idx = 0; getline(cin, str); for (auto &i : str) { if (idx == 4) break; else if (i == al[idx]) idx++; } if (idx == 4) cout 2018. 7. 26.
[BOJ] 11651번: 좌표 정렬하기 2 https://www.acmicpc.net/problem/11651 11650번: 좌표 정렬하기에 이은 STL 연습용 문제다. 주어진 조건에 따라 코드로 잘 적으면 된다. #include #include #include #include using namespace std; bool COMP(const pair &a, const pair &b) { if (a.second == b.second) return a.first < b.first; return a.second < b.second; } int N; vector v; int main() { scanf("%d", &N); for (int i = 0, a, b; i < N; ++i) { scanf("%d %d", &a, &b); v.push_back(ma.. 2018. 7. 26.
[BOJ] 11650번: 좌표 정렬하기 https://www.acmicpc.net/problem/11650 문제에서 하라는데로만 하면 되는데 COMP함수만 잘 짜면 된다.(주어진 조건에 따라서...) STL을 연습하는 문제였다. #include #include #include #include using namespace std; bool COMP(const pair &a, const pair &b) { if (a.first == b.first) return a.second < b.second; return a.first < b.first; } int N; vector v; int main() { scanf("%d", &N); for (int i = 0, a, b; i < N; ++i) { scanf("%d %d", &a, &b); v.push.. 2018. 7. 26.
[BOJ] 2747번: 피보나치 수 https://www.acmicpc.net/problem/2747 n번째 피보나치 수를 출력하는 문제다. 재귀 또는 반복문으로 풀 수 있다. + 메모이제이션 #include int dp[46] = {0, 1, 1, 2}; int fibo(int n) { if (dp[n]) return dp[n]; return dp[n] = fibo(n - 1) + fibo(n - 2); } int main() { int N; scanf("%d", &N); printf("%d\n", fibo(N)); return 0; } #include int main() { int f[100], n; f[0] = 1, f[1] = 1; scanf("%d", &n); for (int i = 2; i 2018. 7. 26.
[BOJ] 2562번: 최대값 https://www.acmicpc.net/problem/2562 참고로 이렇게 푼 이유는 반복문 쓰지 않고 문제 풀기 숙제였기 때문이다. #include int A[9], mx = -987654321, max_idx; void input(int n) { if (n == 9) return; scanf("%d", &A[n]); if (A[n] > mx) { max_idx = n + 1; mx = A[n]; } input(n + 1); } int main() { input(0); printf("%d\n%d\n", mx, max_idx); return 0; } 2018. 7. 26.
[BOJ] 8393번: 합 https://www.acmicpc.net/problem/8393 이렇게 재귀로 풀거나 #include int f(int n) { if (n == 1) return 1; return n + f(n - 1); } int main() { int n; scanf("%d", &n); printf("%d\n", f(n)); return 0; } 간단하게 반복문으로 풀 수 있다 2018. 7. 26.
[BOJ] 2750번: 수 정렬하기 https://www.acmicpc.net/problem/2750 정말 여러 가지 방법으로 풀 수 있다. 우선순위 큐, 정렬 등등... (아마 set이나 map으로도 가능할 거다) 우선순위 큐는 기본적으로 큰 수부터 pop 하기 때문에 -를 붙여서 넣어주고 -를 붙여서 빼주면 오름차순으로 pop 할 수 있게 된다. 아니면 우선순위 큐 정의할 때 의 greater를 사용하면 가능하긴 하지만 귀찮으니까 위의 방법을 애용하자. // 우선순위 큐로 해결하기 #include #include using namespace std; priority_queue pq; int main() { int n; scanf("%d", &n); for (int i = 0, a; i < n; ++i) { scanf("%d", &a);.. 2018. 7. 26.
[BOJ] 2438번: 별찍기 - 1 https://www.acmicpc.net/problem/2438 재귀로 풀기!!! #include > int N; void Print(int n) { if (n == 0) return; printf("*"); Print(n - 1); } void Star(int n) { if (n == N + 1) return; Print(n); puts(""); Star(n + 1); } int main() { scanf("%d", &N); Star(1); return 0; } 반복문으로 풀자!! #include int main(void) { int n; scanf("%d", &n); for (int i = 1; i 2018. 7. 26.
[BOJ] 2439번: 별찍기 - 2 https://www.acmicpc.net/problem/2439 재귀로 풀기! #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(n); puts(""); Star(n + 1); } int main() { scanf("%d", &N); Star(1); return 0; } 반복문으로 풀기! #includ.. 2018. 7. 26.
[BOJ] 2440번: 별찍기 - 3 https://www.acmicpc.net/problem/2440재귀12345678910111213141516171819202122232425#include int N; void PrintAsterisk(int n){ if (n == 0) return; printf("*"); PrintAsterisk(n - 1);} void Star(int n){ if (n == 0) return; PrintAsterisk(n); puts(""); Star(n - 1);} int main(){ scanf("%d", &N); Star(N); return 0;}cs 반복문 12345678910111213#include int main(void){ int n; scanf("%d", &n); for (int i = n; i >.. 2018. 7. 26.
[BOJ] 2441번: 별찍기 - 4 https://www.acmicpc.net/problem/2441재귀123456789101112131415161718192021222324252627282930313233#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 == 0) return; PrintBlank(N - n); PrintAsterisk(n); puts(""); Star(n - 1);} int main(){ scanf("%d", &N);.. 2018. 7. 26.
[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.