ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024 - 03 - 03 C++ 코딩테스트 10주완성 D+8
    Language Grammar/C++ 2024. 3. 3. 17:18

    1-F ROT13 - 백준 11655 문제

    ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13글자씩 밀어서 만든다.

    ASCII 코드를 이용하여 입력받은 문자열 아스키코드에다가 (+ 13) 을 한다.

    하지만 대문자 및 소문자 아스키코드에서 + 13을 하였을 때, 

    알파벳의 범위를 넘어가는 예외처리를 해주어야 알파벳이 아닌 다른 문자열이 나오지 않는다.

    따라서 대문자의 ASCII 코드 끝 범위인 90을 초과할 경우 

    {90 - 26(알파벳의 개수)} 를 써주어야 한다.

    소문자의 경우에는

    {122 - 26(알파벳의 개수)} 이다.

    실습코드

    #include <bits/stdc++.h>
    
    using namespace std;
    string s;
    
    int main()
    {
        //띄어쓰기 까지 입력 받아야함
        getline(cin, s);
    
        for (int i = 0; i < s.size(); i++)
        {
        //대문자인 경우
            if (s[i] >= 65 && s[i] < 97)
            {
            if (s[i] + 13 > 90) s[i] + 13 - 26;
            else s[i] = s[i] + 13;
            }
        //소문자인 경우
            else if (s[i] >= 97 && s[i] <= 122)
            {
            if (s[i] + 13 > 122) s[i] = s[i] + 13 - 26;
            else s[i] = s[i] + 13;
            }
            cout << s[i];
        }
    }



    1-G 한국이 그리울 땐 서버에 접속하지 - 백준 9996 문제 

    패턴 : 알파벳 소문자 여러 개와 별표 하나로 이루어진 문자열

    입력으로 파일목록과 패턴을 받으면

    파일목록중에서 패턴을 검사하여 패턴에 일치하는 파일인지 아닌지 검사하는 프로그램 작성

    패턴중 * 의 위치를 찾아서 * 의 위치를 기반으로 양쪽으로 나눠서 비교

    패턴 = (문자열)a * (문자열)b 이기때문에 

    * 위치기준 

    왼쪽 배열기준으로는 a만   

    오른쪽 배열기준으로 b만 찾으면 패턴이 일치하는지 확인할 수 있다.

    실습코드

    #include <bits/stdc++.h>
    
    using namespace std;
    int n;
    string s, ori_s, pre, suf;
    
    int main()
    {
        cin >> n;
        cin >> ori_s;
        int pos = ori_s.find("*");
        pre = ori_s.substr(0, pos);
        suf = ori_s.substr(pos + 1);
        for (int i = 0; i < n; i++)
        {
            cin >> s;
            //패턴과 입력받은 목록을 비교할시 입력받은 문자열이
            //더 작을 경우 비교자체가 안되기때문에 해놓은 예외처리
            if (pre.size() + suf.size() > s.size())
            {
                cout << "NE\n";
            }
            else
            {
                if (pre == s.substr(0, pre.size()) && suf ==
                s.substr(s.size() - suf.size()))
                cout << "DA\n";
                else cout << "NE\n";
            }
        }
        return 0;
    }



    1-H 수열 - 백준 2559 문제

    연속적인 여러개의 숫자를 입력받고 여러개의 숫자중 합이 가장 큰값을 출력

    N : 1 ~ 10만

    k : 1 ~ 10만 - 1 (n사이값이기때문에)

    온도는 -100 ~ 100

    연속의 온도의 합이 "최대" 되는 값을 구하여야한다.

    최대값을 구하라고 하면 

    최솟값부터 최대값을 구한다.

    최소값을 구하라고 하면

    최대값부터 최솟값을 구한다.

     

    실습코드

     

     

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    int n, k, temp, psum[100001], ret = -1000000;
    int main()
    {
    	cin >> n >> k;
    	for (int i = 1; i <= n; i++)
    	{
    		cin >> temp; psum[i] = psum[i - 1] + temp;
    	}
    
    	for (int i = k; i <= n; i++)
    	{
    		ret = max(ret, psum[i] - psum[i - k]);
    	}
    
    	cout << ret << "\n";
    	return 0;
    }










Designed by Tistory.