-
2024 - 04 - 08 C++ 코딩테스트 10주완성 D+10Language Grammar/C++ 2024. 4. 8. 20:37
1-J 패션왕 신해빈 - 백준 9375 문제
의류의 종류를 담은 Map에는 의류이름을 입력받되,
경우의 수를 계산할 때에는 확률을 곱해서 구하는 것이므로
의류 종류의 갯수 + 1만 구하여 곱해주면 된다.
+1인 이유는 아무것도 안입었을 때의 경우의 수를 추가해주기 때문이다.
경우의 수를 저장하고 나타낼 임시의 변수 ret을 선언한 다음에
종류의 갯수값은 Map의 Value 이므로 Map.second 로 Value 값을 가져와 +1을 더해줘서 곱해준다.
결과값이 계산이 되면 아무것도 안입은 상황은 제외시켜줘야하므로 1을 빼준다.
실습코드#include <bits/stdc++.h> using namespace std; // 해빈이가 가진 의상 수 int ClothtypeCnt; // 해빈이가 가진 의상의 종류 및 이름 map<string,int> ClothMap; string ClothName, Clothtype; int main() { cin >> ClothtypeCnt; while (ClothtypeCnt--) { // 해빈이가 가진 의상의 종류 및 이름 map<string, int> ClothMap; int ClothCnt = 0; cin >> ClothCnt; for (int i = 0; i < ClothCnt; i++) { cin >> ClothName >> Clothtype; ClothMap[Clothtype]++; } // 1인 이유는 맨처음에 곱하였을 때, 0이 되지 않게 하려하기때문 long long ret = 1; for (auto c : ClothMap) { //c.second 라는 것은 c의 두번째 값 즉 value값을 의미함 ret *= ((long long)c.second + 1); } // 아무것도 안입었을 때의 경우의 수를 빼줌 ret--; cout << ret << "\n"; } return 0; }
1-K 팰린드롬 - 백준 1213 문제
조건중에 "정답이 여러개일 경우에는 사전순으로 앞서는 것을 출력한다." 라는 조건이 있으므로
가운데를 기준으로 오름차순으로 양옆으로 문자열 배치를 한다.
카운트배열을 이용하여 입력받은 문자열의 개수를 저장한 후 홀수일 경우에는 가운데에 배치시키는것외에는 방법이 없으므로
그 홀수인 알파벳을 가운데로 정렬한다.
그후 가운데를 기점으로 저장한 알파벳을 출력시킨다.
실습코드#include<bits/stdc++.h> using namespace std; string s, ret; int cnt[200], flag; char mid; int main() { cin >> s; for (char a : s)cnt[a]++; for (int i = 'Z'; i >= 'A'; i--) { if (cnt[i]) { if (cnt[i] & 1) { mid = char(i); flag++; cnt[i]--; } if (flag == 2)break; for (int j = 0; j < cnt[i]; j += 2) { ret = char(i) + ret; ret += char(i); } } } if (mid)ret.insert(ret.begin() + ret.size() / 2, mid); if (flag == 2)cout << "I'm Sorry Hansoo\n"; else cout << ret << "\n"; }
'Language Grammar > C++' 카테고리의 다른 글
2024 - 06 - 04 C++ 코딩테스트 10주완성 D+13 (1) 2024.06.04 2024 - 04 - 30 C++ 코딩테스트 10주완성 D+11 (0) 2024.04.30 2024 - 03 - 11 C++ 코딩테스트 10주완성 D+9 (2) 2024.03.12 2024 - 03 - 03 C++ 코딩테스트 10주완성 D+8 (0) 2024.03.03 2024 - 02 - 27 C++ 코딩테스트 10주완성 D+7 (1) 2024.02.27