no image
[구름 알고리즘 먼데이 챌린지] Week2 : 3. 출석부
C++ STL의 sort는 문자열로 사전순으로 정렬해 준다는 것을 알고 있었기 때문에 출석부를 정렬하는 것 자체는 어렵지 않았다. 다만 double형 실수를 아무런 처리 없이 출력해주는 경우 110.40 같이 끝이 0으로 끝나는 실수를 110.4로 출력해버리는 문제가 발생했다. 이를 해결하기 위해 cout 표현하고자 하는 자리수를 정해주는 함수 즉, cout.precision(7); 을 선언해주고 123.456689를 출력하면 123.4567이 출력된다. 끝에 수가 6이 아닌 이유는 precision에 넘겨준 숫자 밖의 범위는 반올림 처리를 해주기 떄문이다. 2.cout 소수점 이하만 다루게 해주는 역할! 따라서 1,2를 통해 아래와 같이 코드를 작성하여 문제를 해결할 수 있다. #include #inc..
2022.11.04
no image
[구름 알고리즘 먼데이 챌린지] Week2 : 2. 철자 분리 집합
단순 반복문을 통해 해결하였다. #include #include using namespace std; int n, ans; string input; int main() { cin >> n >> input; input += '0'; for (int i = 0; i < n; i++) { ans++; if (input[i] != input[i + 1]) continue; int j = i + 1; while (input[i] == input[j]) { j++; } i = j - 1; } cout
2022.11.04
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