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