끄적끄적 코딩
article thumbnail
[C++] 백준 5397번 키로거
알고리즘 2019. 9. 26. 18:58

스택을 2개 이용해서 문제를 풀었습니다. 기본적으로 A라는 스택에 문자를 넣고 커서가 앞으로 이동되면 B라는 스택에 커서 이후의 문자들을 넣어줍니다. 커서가 다시 뒤로 이동되면 B의 커서를 A의 커서에 담는 식으로 하였습니다. #include #include #include #include #include #include #include using namespace std; int main(int argc, char* argv[]) { int ts; string str; stack a; stack b; vector result; cin >> ts; while(ts--) { result.clear(); cin >> str; for (int i = 0; i < str.length(); ++i) { if (s..

article thumbnail
[C++] 백준 1773번 폭죽쇼
알고리즘 2019. 9. 26. 18:30

200만개의 배열을 만들어서 각 주기에 대해 배수를 전부 체크해줍니다. 그리고 체크된 것들을 카운트해서 출력해주었습니다. #include #include using namespace std; int fire[2000001]; int main(int argc, char* argv[]) { int N, C; int count = 0; int student[100]; cin >> N >> C; for (int i = 0; i > student[i]; } for (int i = 0; i < N; ++i) { for (int j = student[i]; j

article thumbnail
[C++] 백준 5567번 결혼식
알고리즘 2019. 9. 26. 13:40

상근이를 기준으로 1, 2번의 수를 구하는 문제입니다. (1과 2는 중복되지 않습니다.) 1. 상근이의 친구 2. 상근이의 친구에 친구 2차원 벡터에 연결관계를 넣어준 뒤 BFS를 방식으로 2번째 탐색까지 해주었습니다. (2번째 탐색 = 친구에 친구) 여기서 탐색된 사람들의 수를 세서 출력해주었습니다. #include #include #include #include using namespace std; int main(int argc, char *argv[]) { int n, m; int x, y; int count = 0; int visit[501] = { 0, }; vector v; queue q; cin >> n >> m; v.resize(n + 1); for (int i = 0; i < m; ++..

article thumbnail
[C++] 백준 1068번 트리
알고리즘 2019. 9. 26. 12:39

트리에서 하나의 노드를 지웠을 때 루트노드의 개수를 구하는 문제입니다. 노드를 지웠을때 그 노드의 자식노드도 같이 지워집니다. 2차원 벡터 2개를 생성했습니다. vector p 부모 노드값 저장 ex) p[i][0] i의 0번째 부모 vector c 자식 노드값 저장 ex) c[i][0] i의 0번째 자식 지우려는 노드의 부모 노드로 가서 연결된 자식노드(삭제하려는 노드)를 지워줍니다. 연결선이 끊겼으므로, 삭제된 노드의 자식노드와의 연결도 끊기게 됩니다. 그리고 최상위 노드에서 DFS를 통해서 리프노드들을 탐색해서 개수를 출력해줍니다. #include #include #include using namespace std; int n; int num; int del; int start; vector p; ..

article thumbnail
[C++] 백준 4963번 섬의 개수
알고리즘 2019. 9. 26. 11:13

DFS, BFS 문제입니다. 2차원 배열을 만들어서 바다가아니면 카운트를 증가시키고 DFS를 통해서 연결된 곳들을 전부 0으로 처리해주었습니다. 위를 반복하여서 최종 섬의 개수를 찾을 수 있었습니다. #include #include using namespace std; int w, h; int c; int map[60][60]; int mx[8] = { -1, -1, -1, 0, 0, 1, 1, 1 }; int my[8] = { -1, 0, 1, -1, 1, -1, 0, 1 }; void DFS(int a, int b) { map[a][b] = 0; for (int i = 0; i < 8; ++i) { int x = a + mx[i]; int y = b + my[i]; if (map[x][y]) { DF..

article thumbnail
[C++] 백준 1120번 문자열
알고리즘 2019. 9. 26. 02:07

s1과 s2를 비교해서 s1에 앞과 뒤에 문자를 추가해서 차이가 가장 적게 만드는 문제입니다. s1과 s2가 가장 겹치는 곳을 찾아서 카운트 해줍니다. 그리고 카운트에 둘간의 길이 차이를 더해줍니다. (s1의 앞과 뒤에 문자를 추가해주는 경우) s2의 길이에서 카운트를 뺀 만큼이 차이값이므로 출력해줍니다. #include #include #include using namespace std; int main(int argc, char *argv[]) { int sub; int count; int result = 0; string s1; string s2; cin >> s1 >> s2; sub = s2.length() - s1.length(); for (int i = 0; i

article thumbnail
[C++] 백준 2875번 대회 or 인턴
알고리즘 2019. 9. 26. 01:52

2명의 여자와 1명의 남자가 짝을 짓고 K명이 인턴십을 나갈때 가능한 팀을 짤 수 있는 경우의 수를 구하는 문제입니다. 여자에 K부터 ... 0명까지 빼는 경우와 남자에 K부터 ... 0명까지 빼는 경우에 대해서 전부 계산해 보았습니다. 계산된 결과가 가장 큰 것을 출력해주었습니다. #include #include #include using namespace std; int solve(int N, int M) { if (N N >> M >> K; for (int i = 0; i < K / 2 + 1; ++i) { result = max(result, solve(N - K + i, M - i)); result = max(result, solve(N - i, M - K + i)); } cout

article thumbnail
[C++] 백준 10610번 30
알고리즘 2019. 9. 25. 23:39

숫자들을 조합해서 30으로 나누어 떨어지는 가장 큰 수를 출력하는 문제입니다. 숫자들의 합이 3으로 나누어 떨어지면서 0이 존재하는지 확인하면 됩니다. #include #include #include using namespace std; int main(int argc, char *argv[]) { string N; cin >> N; long long sum = 0; bool zero = false; for (int i = 0; i < N.size(); i++) { sum += (N[i] - '0'); if (!(N[i] - '0')) { zero = true; } } sort(N.begin(), N.end(), greater()); (sum % 3 || !zero) ? cout

검색 태그