알고리즘/BOJ 1235

백준 5211번 가단조와 다장조

문제 링크입니다: https://www.acmicpc.net/problem/5211 문자열 파싱만 잘한다면 쉽게 풀 수 있는 문제였습니다. #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); string s; cin >> s; int A = 0, C = 0; for (int i = 0; i < s.size(); ++i) if (i == 0 || s[i - 1] == '|') { if (s[i] == 'A' || s[i] == 'D' || s[i] == 'E') A++; if (s[i] == 'C' || s[i] == 'F' || s[i] == 'G') C++; } if (A == C) { ..

알고리즘/BOJ 2018.11.09

백준 2890번 카약

문제 링크입니다: https://www.acmicpc.net/problem/2890 재미있는 문자열 처리 문제였습니다. 알고리즘은 아래와 같습니다.1. 카약의 머리 부분의 위치와 배 번호를 pair로 합쳐서 벡터에 넣습니다.2. 카약의 머리 부분 위치를 기준으로 내림차순으로 정렬합니다.3. 2번을 기준으로 랭크를 부여합니다. #include #include #include #include #include using namespace std; const int MAX = 50; int R, C; string s[MAX]; int arr[MAX]; bool cmp(pair a, pair b) { if (a.first > b.first) return true; return false; } int main(vo..

알고리즘/BOJ 2018.11.09

백준 10546번 배부른 마라토너

문제 링크입니다: https://www.acmicpc.net/problem/10546 map을 이용해서 이름에 대해 인덱스를 부여합니다.같은 이름이 짝수번 나오면 마라톤을 완주한 것이고 홀수이면 마라톤을 완주 못한 것입니다. #include #include #include #include using namespace std; map m; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; vector v; //name, cnt int idx = 0; for (int i = 0; i > s; //처음 등장할 경우 if (!m.count(s)) { m[s] = i..

알고리즘/BOJ 2018.11.09

백준 4949번 균형잡힌 세상

문제 링크입니다: https://www.acmicpc.net/problem/4949 스택 개념을 이용한 문자열 처리 문제였습니다.백준 9012번 괄호(http://jaimemin.tistory.com/754)와 유사한 문제였습니다. #include #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); while (1) { string s; getline(cin, s); stack st; if (s.length() == 1 && s[0] == '.') break; bool flag = true; for (int j = 0; j < s.length(); j++) { if (s[j] == ..

알고리즘/BOJ 2018.11.09

백준 9324번 진짜 메시지

문제 링크입니다: https://www.acmicpc.net/problem/9324 동일한 문자가 3번 나올 때마다 해당 문자가 다음 인덱스에도 등장해야지 진짜 메시지입니다.따라서, 동일한 문자가 3번 나왔을 때 해당 문자열이 끝난다거나, 다음 인덱스에 다른 문자가 있다면 가짜 메시지입니다! #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int test_case; cin >> test_case; for (int t = 0; t > s; int alphabet[26] = { 0 }; f..

알고리즘/BOJ 2018.11.07

백준 2110번 공유기 설치

문제 링크입니다: https://www.acmicpc.net/problem/2110 이분 탐색을 이용하여 풀어야하는 문제였습니다. 알고리즘은 아래와 같습니다.1. 주어진 집들의 좌표는 정렬되어있지 않으므로 정렬을 합니다.2. 최소 거리는 1, 최대 거리는 처음 집과 마지막 집 사이의 거리입니다.3. 이분 탐색을 진행하는데 해당 간격으로 공유기를 설치할 때 조건을 충족하는지 확인합니다.4. 3번에서 조건을 충족하는 거리 중 최대를 출력합니다. #include #include using namespace std; const int MAX = 200000; int N, C; int house[MAX]; bool possible(int dist) { int cnt = 1; int prev = house[0]; ..

알고리즘/BOJ 2018.11.07

백준 2805번 나무 자르기

문제 링크입니다: https://www.acmicpc.net/problem/2805 백준 1654번 랜선 자르기(http://jaimemin.tistory.com/964)와 매우 유사한 문제였습니다. #include #include #include using namespace std; const int MAX = 1000000; int N; long long M; long long tree[MAX]; bool possible(long long height) { long long len = 0; //나무를 잘라본다 for (int i = 0; i 0) len += tree[i] - height; //조건 충족 if (len >= M) return ..

알고리즘/BOJ 2018.11.07

백준 1654번 랜선 자르기

문제 링크입니다: https://www.acmicpc.net/problem/1654 이분 탐색을 이용하는 문제에 익숙하지 않다고 판단해서 풀어본 문제입니다. 알고리즘은 아래와 같습니다.1. 입력 받은 전선의 길이 중 최대 길이를 high로 잡습니다.2. 자르는 전선의 길이가 존재해야하므로 low는 1로 잡습니다.3. 이분 탐색을 진행하면서 mid에 대해 조건을 충족하는지 확인합니다.i) 조건이 충족된다면 자르는 전선의 길이를 늘립니다.ii) 조건이 충족되지 않는다면 자른는 전선의 길이를 줄입니다.4. 조건이 충족되는 최대 길이를 출력합니다. #include #include using namespace std; const int MAX = 10000; int N, M; long long electricLi..

알고리즘/BOJ 2018.11.07

백준 3054번 피터팬 프레임

문제 링크입니다: https://www.acmicpc.net/problem/3054 웬디 프레임이 피터팬 프레임보다 우선순위가 높다는 점만 고려해준다면 어렵지 않게 풀 수 있는 문제였습니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); string s; cin >> s; string frame[5]; //맨 위와 아래 frame[0] = "..#.."; for (int i = 1; i < s.length(); i++) if (i % 3 != 2) frame[0] += ".#.."; else frame[0] += ".*.."; frame[4] = frame[0]; //두 번째와..

알고리즘/BOJ 2018.11.06