23.07.14 ~ 25 계륵 일기

E woo·2023년 7월 25일

계륵 일기

목록 보기
13/31
post-thumbnail

EOF

https://www.acmicpc.net/problem/10820

다음과 같이 따로 N 을 입력받지 않으면서 계속 되는 테스트 케이스를 실행하기 위해서는
더 이상 입력이 들어오지 않거나 입력 데이터형의 에러 전까지 계속 받아들이는 EOF 를 사용하면 된다.

  • getline 으로 계속 문자열 입력을 받음
#include <iostream>
#include <string>


using namespace std;

int main()
{
    string str;
    while (getline(cin, str))
    {

        int arr[4] = {
            0,
        };

        for (int j = 0; j < str.length(); j++)
        {
            if (str[j] >= 'a' && str[j] <= 'z')
                arr[0]++;
            else if (str[j] >= 'A' && str[j] <= 'Z')
                arr[1]++;
            else if (str[j] >= '0' && str[j] <= '9')
                arr[2]++;
            else if (str[j] == ' ')
                arr[3]++;
        }

        for (int k = 0; k < 4; k++)
        {
            cout << arr[k] << " ";
        }
        cout << "\n";
    }
    return 0;
}

stoi, stoll

stoi 는 string to int 로 int 형 범위 내에서 반환하므로 만약 int 형 범위 밖의 값을 정수로 바꾸고자 한다면

stoll 를 사용하면 된다.

#include <iostream>
#include <string>

using namespace std;

int main()
{

    string A, B, C, D;

    cin >> A >> B >> C >> D;

    long long a = stoll(A + B);
    long long b = stoll(C + D);

    cout << a + b;

    return 0;
}

이외에도 stod 나 stof, stoul, stoull 도 존재한다.


팩토리얼 0

팩토리얼 0! 은 1이라는 사실을 깜빡했었다...

https://www.acmicpc.net/problem/11050

그래서 0에 대한 팩토리얼 값도 설정해주어야 한다...

0! 0 일 경우 5C0_5C_0 과 같은 값을 계산하지 못하기 때문에


long long 과 mod

https://www.acmicpc.net/problem/15829

보통 long long 의 최댓값을 넘어가는 수가 계산되는 문제에서는

구한 값에 % 을 통해 값을 줄이곤 한다.

그러나 이때 언제 % 을 수행하냐에 따라 결과값이 달라지기 때문에

이를 유의해서 사용해야한다.

    for (int i = 0; i < str.length(); i++)
    {
        sum = (sum + (str[i] - 'a' + 1) * b) % 1234567891;
        b = (b * 31) % 1234567891;
    }
    for (int i = 0; i < str.length(); i++)
    {
        sum += (str[i] - 'a' + 1) * b) % 1234567891;
        b = (b * 31) % 1234567891;
    }

위의 두 코드는 sum 이 더해지는 시점이 다르기 때문에
다른 값을 가지게 되므로 주의하자!!

profile
뒘벼

0개의 댓글