no image
[C++] 백준 - 27433번 문제 (팩토리얼 2)(재귀 사용X)
문제설명 소스코드 #include using namespace std; int main() { int input; cin >> input; if (input == 0) { cout
2023.04.06
no image
[C++] 백준 5단계 - 5622번 문제
문제설명 소스코드 #include using namespace std; int main() { string input; int sum = 0; cin >> input; for (int i = 0; i < input.length(); ++i) { if (input[i] == 'A' || input[i] == 'B' || input[i] == 'C') sum += 3; else if (input[i] == 'D' || input[i] == 'E' || input[i] == 'F') sum += 4; else if (input[i] == 'G' || input[i] == 'H' || input[i] == 'I') sum += 5; else if (input[i] == 'J' || input[i] == 'K' ..
2023.04.05
no image
[C++] 백준 5단계 - 2908번 문제
문제설명 소스코드 #include #include using namespace std; int main() { string a; string b; cin >> a >> b; for (int i = 0; i d ? cout
2023.04.05
no image
[C++] 백준 5단계 - 1152번 문제
문제설명 소스코드 #include #include using namespace std; int main() { string input; int count = 0; getline(cin, input); if (input.empty() || ((input[0] == ' ') && input.length() == 1)) { //문자열이 없거나 있어도 공백을 포함한 1글자라면 0을 출력한다. cout
2023.04.05
no image
[C++] 백준 5단계 - 2675번 문제
문제설명 소스코드 #include using namespace std; int main() { int T; int N; string input; cin >> T; for (int i = 0; i > N >> input; for (int j = 0; j < input.length(); ++j) { for (int k = 0; k < N; ++k) cout
2023.04.03
no image
[C++] 백준 5단계 - 10809번 문제
문제설명 소스코드 #include using namespace std; int main() { string input; string alphabet = "abcdefghijklmnopqrstuvwxyz"; cin >> input; for (int i = 0; i < alphabet.length(); ++i) { if (input.find(alphabet[i]) != string::npos) { cout
2023.04.03
no image
[C++] 백준 5단계 - 11720번 문제
문제설명 소스코드 #include #include //stoi()함수를 쓰기위해 using namespace std; int main() { string input; int N; int sum = 0; string tmp; cin >> N; cin >> input; for (int i = 0; i N; for (int i = 0; i > input; sum += input - 48; } cout
2023.04.03
no image
[C++] 백준 5단계 - 11654번 문제
문제설명 소스코드 #include using namespace std; int main() { char input; cin >> input; cout
2023.04.02

문제설명

 

소스코드

#include<iostream>
using namespace std;
int main() {
    int input;
    cin >> input;
    if (input == 0) { cout << 1; return 0; }
    long long tmp = 1;
    for (int i = 1; i <= input; ++i) tmp *= i;
    cout<< tmp;
}

주의해야 할 점은 20! 은 int형 변수의 허용범위를 넘기 때문에 long long으로 해야 한다.

문제설명

 

소스코드

#include<iostream>
using namespace std;
int main()
{
	string input; int sum = 0;
	cin >> input;
	for (int i = 0; i < input.length(); ++i)
	{
		if (input[i] == 'A' || input[i] == 'B' || input[i] == 'C') sum += 3;
		else if (input[i] == 'D' || input[i] == 'E' || input[i] == 'F') sum += 4;
		else if (input[i] == 'G' || input[i] == 'H' || input[i] == 'I') sum += 5;
		else if (input[i] == 'J' || input[i] == 'K' || input[i] == 'L') sum += 6;
		else if (input[i] == 'M' || input[i] == 'N' || input[i] == 'O') sum += 7;
		else if (input[i] == 'P' || input[i] == 'Q' || input[i] == 'R' || input[i] == 'S') sum += 8;
		else if (input[i] == 'T' || input[i] == 'U' || input[i] == 'V') sum += 9;
		else if (input[i] == 'W' || input[i] == 'X' || input[i] == 'Y' || input[i] == 'Z') sum += 10;
	}
	cout << sum;
}

또는

#include<iostream>
using namespace std;
int main() {
	string input;
	cin >> input;
	int arr[] = { 3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,8,9,9,9,10,10,10,10 };
	int sum = 0;
	for (int i = 0; i < input.length(); ++i) sum += arr[input[i] - 'A'];
	cout << sum;
}

 

풀이

첫 번째 코드 설명

  • for문으로 문자열의 길이만큼 루프를 돈다.
  • if문으로 각 문자에 맞게 sum에 더한다.

두 번째 코드 설명

  • 배열에는 알파벳의 개수 만큼 숫자가 들어가 있고, 각 원소는 A~Z에 대응하는 숫자이다.
  • 이 또한 문자열의 길이만큼 루프를 도는데, sum에는 각 문자열에 'A'(65)를 뺀 arr배열의 인덱스값을 더한다. 예를 들어 'B'는 아스키코드상으로 66이므로 'A'를 빼면 1이다 즉 arr[1]인 3을 sum에 더한다.

문제설명

 

소스코드

#include<iostream>
#include <string>
using namespace std;
int main()
{
	string a; string b;
	cin >> a >> b;
	for (int i = 0; i < 1; ++i)
	{
		string tmp = "   ";
		tmp[i] = a[2 - i];
		a[2 - i] = a[i];
		a[i] = tmp[i];
		tmp[i] = b[2 - i];
		b[2 - i] = b[i];
		b[i] = tmp[i];
	}
	int c = stoi(a); int d = stoi(b);
	c > d ? cout << c : cout << d;
}

문제설명

 

소스코드

#include<iostream>
#include <string>
using namespace std;
int main()
{
	string input; int count = 0;
	getline(cin, input);
	if (input.empty() || ((input[0] == ' ') && input.length() == 1)) 
	{
    	//문자열이 없거나 있어도 공백을 포함한 1글자라면 0을 출력한다.
		cout << 0;
		return 0;
	}
	int npos;
	npos = input.find_first_not_of(' ');
	input.erase(0, npos); //왼쪽 공백 제거
	npos = input.find_last_not_of(' ');
	input.erase(npos + 1); //오른쪽 공백 제거
	for (int i = 0; i < input.length(); ++i)
	{
		if (input[i] == ' ') ++count; //공백 카운트한다.
	}
	cout << ++count; //공백 +1이 단어의 개수이다.
}

 

풀이

  1. cin으로 문자열을 받지않고 getline()으로 받는다.
  2. 양쪽 공백 제거
  3. 문자 사이의 공백 수 +1이 단어의 개수이다.
  4. 문자열이 없거나 있어도 공백을 포함한 1글자라면 0을 출력한다.

왜 cin으로 받으면 안되는 것이고, getline()으로 받아야하는지 모르겠다. 나중에 알아봐야겠다.

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    int T; int N; string input;
    cin >> T;
    for (int i = 0; i < T; ++i)
    {
        cin >> N >> input;
        for (int j = 0; j < input.length(); ++j)
        {
            for (int k = 0; k < N; ++k) cout << input[j];
        }
        cout << endl;
    }
}

for문을 무조건 3개를 중첩하는 방법밖에 없는 것 같다..

3개 미만으로 하는 방법이 도저히 생각나지 않는다.

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    string input; string alphabet = "abcdefghijklmnopqrstuvwxyz";
    cin >> input;
    for (int i = 0; i < alphabet.length(); ++i)
    {
        if (input.find(alphabet[i]) != string::npos)
        {
            cout << input.find(alphabet[i]) << " ";
        }
        else cout << -1 << " ";
    }
}

 

풀이

string형의 find()함수를 활용하여 풀었다.

  • string 클래스의 멤버함수이며, find("찾고자 하는 문자 또는 문자열")로 사용한다.
  • 리턴값은 찾는 문자의 첫번째 인덱스값이다.
  • 찾는 문자가 없다면 npos를 리턴하는데 쓰레기값이다.

문제설명

소스코드

#include <iostream>
#include <string> //stoi()함수를 쓰기위해
using namespace std;
int main()
{
	string input; int N; int sum = 0; string tmp;
	cin >> N;
	cin >> input;
	for (int i = 0; i < N; ++i)
	{
		tmp = input[i]; //string형은 배열처럼 인덱싱할 수 있다.
		sum += stoi(tmp); //stoi()함수는 string자료형을 숫자로 바꿔준다.
	}
	cout << sum;
}

 

또는

#include <iostream>
using namespace std;
int main()
{
    int N; char input; int sum = 0;
    cin >> N;
    for (int i = 0; i < N; i++)
    {
        cin >> input;
        sum += input - 48;
    }
    cout << sum << endl;
}

위 방식은 아스키코드에서 '0'부터 '9'까지 48 ~ 57로 대응되는 것을 이용한 것이다. 

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
	char input;
	cin >> input;
	cout << (int)input;
}