본문 바로가기

온라인저지144

[BOJ] 10845번: 큐 https://www.acmicpc.net/problem/10845 자료구조 보면 class로 구현하고 싶어서 한 번 해봤다.. 별로 좋지 않은 선택인 것 같다. 적어도 PS에서만큼은.... #include using namespace std; class Queue { public: int is_empty() { return (vsize == 0); } void push(int x) { Array[vrear] = x; vrear++; vsize++; } int pop() { if (is_empty()) return -1; else { int ans = Array[vfront++]; vsize--; return ans; } } int size() { return vsize; } int front() { r.. 2018. 7. 26.
[BOJ] 10828번: 스택 https://www.acmicpc.net/problem/10828 6달 전에 짠 코드는 4ms가 나왔는데 똑같은 코드로 이틀 전에 제출했더니 0ms가 나왔다. ㅋㅋㅋ 재미있네 이런 문제는 사실 N의 제한이 있기 때문에 굳이 링크드 리스트로 구현할 필요는 없다. 그리고 문자열을 다 볼 필요 없이 앞 1~2자리만 봐도 어떤 입력인지 알 수 있다. #include #include #define MAX 10001 typedef struct stack { int Stack[MAX]; int size; int empty; int top; } stack; stack Stk; int main() { Stk.empty = 1, Stk.size = 0; int N; scanf("%d", &N); for (int i = .. 2018. 7. 26.
[BOJ] 1158번: 조세퍼스 문제 https://www.acmicpc.net/problem/1158 vector를 사용하면 쉽게 문제를 풀 수 있다. v.erase하면 그 지워진 곳이 메꿔지기 때문이다. (실제 구현상 그런지는 모르겠다..) #include #include using namespace std; int main() { int n, m; vector v; scanf("%d %d", &n, &m); if (n == 1) { printf(""); return 0; } for (int i = 1; i 2018. 7. 26.
[BOJ] 1157번: 단어 공부 https://www.acmicpc.net/problem/1157 소문자, 대문자 구분해서 26칸짜리 배열에 다 집어넣고 가장 많이 있는 인덱스 + 'A' 출력! #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false), cin.tie(0); string s; cin >> s; int al[26] = { 0, }; for (auto &i : s) { if ('A' 2018. 7. 26.
[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.