ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024 - 04 - 08 C++ 코딩테스트 10주완성 D+10
    Language 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";
    }









     


Designed by Tistory.