전체 글 2645

백준 1181번 단어 정렬

문제 링크입니다: https://www.acmicpc.net/problem/1181 생각보다 예외처리해야할 부분이 많은 문제였습니다.같은 단어를 입력받지 않기 위해 map을 사용하였고 정렬을 위해 cmp 함수를 직접 정의했습니다. #include #include #include #include #include using namespace std; bool cmp(string a, string b) { if (a.length() < b.length()) return true; //같은 길이인 경우 사전 순서 if (a.length() == b.length()) { for (int i = 0; i < a.length(); i++) if (a[i] == b[i]) continue; else if (a[i] <..

알고리즘/BOJ 2018.10.09

백준 12110번 Telefoni

문제 링크입니다: https://www.acmicpc.net/problem/12110 그리디하게 접근하면 O(N)으로 풀 수 있는 문제였습니다. 알고리즘은 아래와 같습니다.1. 시작점으로부터 출발을 합니다.2. 거리 D 내에 전화가 있으면 해당 전화기로부터 다시 출발합니다.3. 최대거리(D)를 갔는데도 전화가 없다면 해당 지점에 전화를 설치하고 다시 출발합니다. #include using namespace std; const int MAX = 300000 + 1; int N, D; bool phone[MAX]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> D; for (int i = 0; i > ..

알고리즘/BOJ 2018.10.04

백준 10611번 PŠENICA

문제 링크입니다: https://www.acmicpc.net/problem/10611 처음에는 덱을 이용하여 직접 시뮬레이션을 하였더니 시간 복잡도가 O(N^2)이 나와 TLE가 발생했던 문제였습니다.문제의 입력은 최대 100,000개이기 때문에 O(N)으로 풀어야 AC를 받을 수 있는 문제였습니다. 알고리즘은 아래와 같습니다.1. {밀의 높이, 해당 높이 등장한 횟수}를 저장하는 덱을 선언하고 밀의 높이 오름차순으로 저장합니다.2. 애초에 밀의 높이 종류가 3 미만이면 Slavko가 이깁니다. 따라서, Slavko가 이긴다고 가정합니다.3. 직접 시뮬레이션을 하지 않으려면 최소높이 밀의 개수와 최대높이 밀의 개수를 파악해야합니다.i) 최소높이 밀의 개수가 최대 높이 밀의 개수보다 작거나 같다면 Mirk..

알고리즘/BOJ 2018.10.03

백준 15594번 Out of Place

문제 링크입니다: https://www.acmicpc.net/problem/15594 저는 복잡하게 풀었지만 같은 학교 학우이신 Greent55님(https://blog.naver.com/pasdfq/221368719157)은 간단하게 푸셨으니 참고하시는 것을 추천드립니다! 알고리즘은 아래와 같습니다.1. 이상적인 배치를 구한 다음에 현재 배치와 다르게 서 있는 소들을 표시합니다.2. 이상적인 배치와 동일한 위치에 있는 소들은 움직일 필요가 없습니다.3. 현재 옮길 소 이전의 소들은 이상적인 위치에 있으므로 옮길 소 오른쪽에 있는 소들만 비교해보면 됩니다.-> 그리디하게 접근할 수 있었던 이유4. 오른쪽에 배치된 소들 중 옮길 소가 위치한 곳에 배치해야하는 소를 찾고 서로 위치를 바꿔줍니다.5. 정렬이 ..

알고리즘/BOJ 2018.10.01

백준 15593번 Lifeguards(Bronze)

문제 링크입니다: https://www.acmicpc.net/problem/15593 N의 범위가 작기 때문에 직접 시뮬레이션을 돌려도 TLE가 발생하지 않습니다! #include #include using namespace std; const int MAX = 1000 + 1; pair lifeguard[100]; int shifts[MAX]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; for (int i = 0; i > lifeguard[i].first >> lifeguard[i].second; for (int j = lifeguard[i].first; j < lifeguard[..

알고리즘/BOJ 2018.10.01

백준 15592번 Blocked Billboard II

문제 링크입니다: https://www.acmicpc.net/problem/15592 크게는 두가지의 경우 세부적으로는 4가지의 경우를 고려해야하는 문제였습니다.1. 전광판이 높이를 다 가리는 경우i) 오른쪽을 덮는 경우ii) 왼쪽을 덮는 경우2. 전광판이 양옆을 다 가리는 경우i) 위쪽을 덮는 경우ii) 아래쪽을 덮는 경우 *전광판의 모양은 직사각형이기 때문에 높이와 양옆을 각각 일부만 가린다면 무용지물입니다. #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int x1, x2, x3, x4; int y1, y2, y3, y4; cin >> x1 >> y1 >> x2 >> y2; cin >> ..

알고리즘/BOJ 2018.10.01