no image
[구름 알고리즘 먼데이 챌린지] Week2 : 1. 합격자 찾기
어려운 문제는 아니었고 평균 값을 저장하는 average변수의 타입에만 주의하도록 하자. 성적의 평균 값을 저장하는 average변수를 int형으로 선언한 경우 발생할 수 있는 문제를 살펴보자. 실제 평균값이 3.3인데 int형으로 강제 형변환 되며 3점을 획득한 학생이 합격하게 되는 경우가 발생할 수 있다. #include #include using namespace std; int t, n; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while (t--) { cin >> n; int pass = 0; double average = 0; vector score(n); for (int i = 0; i < n; ..
2022.11.04
no image
[구름 알고리즘 먼데이 챌린지] Week1 : 4. 소수 찾기
간단한 소수 판별 문제로 볼 수 있고 어렵지 않게 해결할 수 있었다. #include #include using namespace std; int n, a, ans; bool is_prime(int a) { if (a n; for (int i = 1; i > a; if (is_prime(i)) ans += a; } cout n; erato(); for (int i = 1; i > a; if (!prime[i]) ans += a; } cout > 3]은 sieve[k / 8]과 동일 -> bit 연산이 더 빠름. //(1 k & 7은 k % 8과 동일 return sieve[k >> 3] & (1 > 3] &= ~(1 a; //자릿수 i..
2022.11.04
no image
[구름 알고리즘 먼데이 챌린지] Week1 : 3. 최장 맨해튼 거리
주어진 정수가 4개 뿐이기 때문에 모든 가능한 조합을 따져봐도 문제를 해결할 수 있겠지만, 최장 맨해튼 거리는 서로 가장 멀리 떨어진 두 좌표에서 찾아지는 값이기 때문에 가장 작은 값을 가지는 좌표와 가장 큰 값을 가지는 좌표를 바로 구해서 문제를 해결해 주었다. 가령, 주어진 예시 -1 -3 5 -10 에서 오름차순으로 정렬해 준 뒤 (-10 -3 -1 5) 가장 작은 값을 가지는 좌표 a = (-10, -3) 가장 큰 값을 가지는 좌표 b = (-1, 5) 두 좌표 a, b를 구하여 최장 맨해튼 거리를 구해 주면 쉽게 해결할 수 있다. #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin..
2022.11.04
no image
[구름 알고리즘 먼데이 챌린지] Week1 : 2. 동명이인
모든 이름이 소문자로 주어지기 때문에 특별히 고려해야 할 사항이 없었다. #include #include using namespace std; int n, ans; string s, comp; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> s; for (int i = 0; i > comp; if (comp.find(s) != string::npos) ans++; } cout
2022.11.04
no image
[구름 알고리즘 먼데이 챌린지] Week1 : 1. 경로의 개수
i번째 섬에서 어떤 다리를 사용하냐에 따라 i+1번째 섬에서 사용할 수 있는 다리에 영향을 미치지 않는다. 즉, 각 섬에서 다리를 선택하는 것은 독립 사건으로 볼 수 있다. 또한, 다리는 단방향성이므로 i+1번째 섬에서 다시 i번 째 섬으로 이동하는 경우를 고려할 필요가 없으므로 독립 사건에서의 경우의 수를 구하는 문제로 판단하여 쉽게 해결할 수 있었다. 단, 10개의 섬 모두 100개의 다리가 있는 worst case의 경우 int형 범위를 벗어 날 수 있다는 것에 유의하자. #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, num; long long ans =1 ; ..
2022.11.04
no image
[구름 알고리즘 먼데이 챌린지] Week0 : 2. 카드 교환하기
문제를 읽고 번호가 작은 사람에게 작은 수의 카드가 번호가 큰 사람에게는 큰 수의 카드를 매칭 시키면 최소 불만족도를 구할 수 있을 거라고 생각하고 단순하게 오름 차순으로 정렬하여 문제를 해결하고자 했다. 하지만, 친구 관계가 맺어진 사람끼리만 카드 교환이 가능하다는 조건이 있어 조금 더 고민해 봐야했다. 💡내가 생각한 방법은 그룹화 하는 것이었다. 6 7 3 4 4 1 5 6 1 3 1 6 3 6 3 5 1 5 5 6 1 2 위 예시1을 살펴보면 2번 사람의 친구는 1번 뿐이지만 1번 사람을 거치면 3,5,6 번 사람들과도 카드 교환이 가능하다. 또한, 카드 교환은 원하는 만큼 가능하기 때문에 계속 카드 교환을 하다 보면 오름 차순으로 정렬된 형태를 가질 수 있을 것이라 생각했다. 즉, DFS로 먼저 ..
2022.11.03
no image
[구름 알고리즘 먼데이 챌린지] Week0 : 1.단어장 만들기
첫주차라 난이도가 어렵지 않았고 c++ STL sort와 정렬 기준에 맞는 compare함수를 별도로 구현하여 문제를 해결했다. #include #include #include #include using namespace std; int n, k; bool compare(string a, string b) { if (a.length() == b.length()) return a > n >> k; vector words(n); for (int i = 0; i > words[i]; so..
2022.11.03
[백준(BOJ)] 18185 라면 사기(Small)
https://www.acmicpc.net/problem/18185 18185번: 라면 사기 (Small) 라면매니아 교준이네 집 주변에는 N개의 라면 공장이 있다. 각 공장은 1번부터 N번까지 차례대로 번호가 부여되어 있다. 교준이는 i번 공장에서 정확하게 Ai개의 라면을 구매하고자 한다(1 ≤ i www.acmicpc.net 문제를 보고 그리디(Greedy) 알고리즘 문제라고 판단했는데 접근 방향은 좋았다. 먼저, 처음에 시도한 잘못된 접근 방법은 아래와 같다. 3개의 연속된 공장에서 라면을 구매할 수 있는 경우를 phase3 ->연속 된 세 공장 중 최소 값 만큼을 세 공장 모두에서 구매(결과부터 얘기하자면 여기부터 잘못 접근했다...) 2개의 연속된 공장에서 라면을 구매할 수 있는 경우를 phas..
2022.11.02