알고리즘/BOJ 1235

백준 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

백준 1055번 끝이없음

문제 링크입니다: https://www.acmicpc.net/problem/1055 처음에는 전부 시뮬레이션을 하는 실수를 한 뒤 bongssi님(http://bongssi.tistory.com/search/1055)의 해설을 보고 풀 수 있었던 문제였습니다. 알고리즘은 아래와 같습니다.1. 반복하는 횟수의 최대값이 매우 크기 때문에 직접 시뮬레이션을 하면 TLE 및 메모리 초과가 발생합니다.-> 따라서, 재귀 함수를 통해 해당 인덱스에 무슨 알파벳이 있는지를 파악해야합니다.2. '$'의 개수가 2 이상이면 30번만 반복해도 탐색하고자 하는 인덱스의 범위를 초과하기 때문에 반복하는 횟수를 줄일 수 있습니다.3. 반복한 횟수를 기준으로 i 번째 인덱스에 위치한 알파벳을 찾기 위해 재귀함수를 이용합니다.4...

알고리즘/BOJ 2018.09.30

백준 6588번 골드바흐의 추측

문제 링크입니다: https://www.acmicpc.net/problem/6588 알고리즘은 아래와 같습니다.1. 에라토스테네스의 체를 이용하여 소수인 수를 표시하고 벡터에 홀수인 소수들만 저장시킵니다.2. 벡터를 쭉 탐색하며 (N - 소수)도 소수인 수를 찾습니다.3. b - a가 최대인 덧셈을 구하라고 했으니 발견하는 즉시 반복문을 탈출하고 다음 숫자에 대한 계산식을 찾습니다. #include #include using namespace std; const int MAX = 1000000; int minFactor[MAX]; vector prime; //소수 //에라토스테네스의 체 void eratosthenes(void) { minFactor[0] = minFactor[1] = -1; for (i..

알고리즘/BOJ 2018.09.29

백준 14412번 Ronald

문제 링크입니다: https://www.acmicpc.net/problem/14412 이 문제는 솔직히 말하자면 증명 없이 감으로 푼 문제입니다.같은 학교 학우이신 Green55님(https://blog.naver.com/pasdfq/221367374753)은 백준 14927번 전구 끄기(http://jaimemin.tistory.com/699) 문제처럼 그리디하게 접근하셔서 푸셨습니다.따라서 Green55님의 블로그에 작성된 코드를 참고하시는 것을 추천드립니다!! 저는 첫 번째 예제를 토대로 그래프를 계속 그려본 결과 그래프가 초기에 두개의 컴포넌트로 나뉘어있고 두 개의 컴포넌트들이 모두 완전 그래프라면 성립한다고 판단했습니다. 첫 번째 예제에서는 정점이 두개이고 간선이 0개입니다.즉, 1 과 2 두개..

알고리즘/BOJ 2018.09.29

백준 14411번 합집합

문제 링크입니다: https://www.acmicpc.net/problem/14411 얼핏 보면 라인 스위핑 문제 같지만 라인 스위핑 문제보다는 쉬운 문제였습니다.라인 스위핑 문제인줄 알고 시도조차 안했지만 같은 학교 학우이신 Green55님(https://blog.naver.com/pasdfq/221367374753)의 설명을 듣고 풀 수 있었습니다. 알고리즘은 아래와 같습니다.1. 좌표를 입력받은 뒤 넓이를 구할 때 필요한 좌표만을 남깁니다.-> 좌표 (x, y)가 있을 때 다른 좌표 (a, b)에 대해 (x> N; //넓이는 long long일 수 있으므로 vector v; for (int i = 0; i > x >> y; v.push_back({ x..

알고리즘/BOJ 2018.09.29

백준 14410번 Pareto

문제 링크입니다: https://www.acmicpc.net/problem/14410 부동소수점에 유의해야하는 문제였습니다. 알고리즘은 아래와 같습니다.1. 금액을 내림차순으로 정렬합니다.2. 앞에서부터 한명씩 추가하면서 누적합 비율과 인원 비율의 차를 계산하고 기록합니다.3. 기존에 기록된 비율의 차보다 현재 비율의 차가 작아질 경우 반복문에서 탈출하고 기존 비율 A와 B를 출력합니다. #include #include #include using namespace std; const int MAX = 300000; int bank[MAX]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; long long money ..

알고리즘/BOJ 2018.09.29