no image
[C++] 백준 6단계 - 1316번 문제 (그룹 단어 체커)
문제설명 소스코드 #include using namespace std; int main() { string input; int N; int count = 0; cin >> N; for (int i = 0; i > input; for (int j = 0; j < input.length(); ++j) { for (int u = 0; u < j; ++u) { if ((input[j] == input[u]) && (input[j] != input[j - 1])){ TF = false; break; } } } if (TF) ++count; } cout
2023.04.16
no image
[C++] 백준 6단계 - 2941번 문제 (크로아티아 알파벳)
문제설명 소스코드 #include using namespace std; int main() { string input; cin >> input; while (true) { if ((input.find("nj") != string::npos) || (input.find("c=") != string::npos) || (input.find("c-") != string::npos) || (input.find("dz=") != string::npos) || (input.find("d-") != string::npos) || (input.find("lj") != string::npos) || (input.find("s=") != string::npos) || (input.find("z=") != string::np..
2023.04.15
no image
[C++] 백준 - 10039번 문제 (평균 점수)
문제설명 소스코드 #include using namespace std; int main() { int sum = 0; for (int i = 0; i > n; if (n
2023.04.15
no image
[C++] 백준 6단계 - 1157번 문제 (단어 공부)
문제설명 소스코드 #include using namespace std; int main() { int arr[26] = { 0 }; int max = 0; int count = 0; int idx = 0; string input; cin >> input; for (int i = 0; i max){ max = arr[i]; idx = i; } //가장 많이 사용된 알파벳 검사 for (int i = 0; i < 26; ++i) i..
2023.04.12
no image
[C++] 백준 6단계 - 10988번 문제 (팰린드롬인지 확인하기)
문제설명 소스코드 #include using namespace std; int main() { string input; cin >> input; for (int i = 0; i < input.length() / 2; ++i) { if (input[i] != input[input.length() - 1 - i]) { cout 4번 반복 input[input.length() - 1 - i] 이부분은 i가 증가할 수록 문자열 인덱스의 끝에서 점점 인덱스의 가운데를 비교하게 한다.
2023.04.11
no image
[C++] 백준 - 5524번 문제 (입실 관리)
문제설명 소스코드 #include using namespace std; int main() { int n; string input; cin >> n; for (int i = 0; i > input; for (int i = 0; i < input.length(); i++) { input[i] = tolower(input[i]); } cout
2023.04.10
no image
[C++] 백준 - 5532번 문제 (방학 숙제)
문제설명 소스코드 #include using namespace std; int main() { int L, A, B, C, D, tmp1, tmp2; cin >> L >> A >> B >> C >> D; if (A % C != 0) tmp1 = (A / C) + 1; else tmp1 = A / C; if (B % D != 0) tmp2 = (B / D) + 1; else tmp2 = B / D; if (tmp1 > tmp2) cout
2023.04.09
no image
[C++] 백준 - 2752번 문제 (세수 정렬)
문제설명 소스코드 #include using namespace std; int main() { int arr[3]; for (int i = 0; i > arr[i]; } int tmp; for (int i = 0; i arr[j]) { tmp = arr[j]; arr[j] = arr[i]; arr[i] = tmp; } } } for (int i = 0; i < 3; ++i) { cout
2023.04.08

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() {
	string input; int N; int count = 0;
	cin >> N;
	for (int i = 0; i < N; ++i) 
	{
		bool TF = true;
		cin >> input;
		for (int j = 0; j < input.length(); ++j) 
		{
			for (int u = 0; u < j; ++u) 
			{
				if ((input[j] == input[u]) && (input[j] != input[j - 1])){ TF = false; break; }
			}
		}
		if (TF) ++count;
	}
	cout << count;
}

 

풀이

  • bool 자료형 TF는 true로 초기화된다.
  • 문자열의 길이 직전 까지 루프를 돌면서(j), 0부터 j 직전 까지 루프를 다시 돈다.(u)
  • 현재 알파벳(j)과 이전의 알파벳(k)이 같으면서, 현재 알파벳(j)과 바로 직전 알파벳(j-1)이 다르면 그룹 단어가 아니다.

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() {
    string input;
    cin >> input;
    while (true)
    {
        if ((input.find("nj") != string::npos) || (input.find("c=") != string::npos) || (input.find("c-") != string::npos) || (input.find("dz=") != string::npos) ||
            (input.find("d-") != string::npos) || (input.find("lj") != string::npos) || (input.find("s=") != string::npos) || (input.find("z=") != string::npos))
        {
            if (input.find("lj") != string::npos) input.replace(input.find("lj"), 2, "0");
            else if (input.find("nj") != string::npos) input.replace(input.find("nj"),2, "0");
            else if (input.find("c=") != string::npos) input.replace(input.find("c="), 2, "0");
            else if (input.find("c-") != string::npos) input.replace(input.find("c-"), 2, "0");
            else if (input.find("dz=") != string::npos) input.replace(input.find("dz="), 3, "0");
            else if (input.find("d-") != string::npos) input.replace(input.find("d-"), 2, "0");
            else if (input.find("s=") != string::npos) input.replace(input.find("s="), 2, "0");
            else if (input.find("z=") != string::npos) input.replace(input.find("z="), 2, "0");
        }
        else break;
    }
    cout << input.length() << endl;;
}

 

풀이

  • 문자열에 크로아티아 알파벳이 없을 때까지 루프를 돈다.
  • 크로아티아 알파벳이 있으면 해당 알파벳을 "0"으로 만들어서 1글자 취급한다.
  • 문자열의 길이를 출력한다.
string 내장 함수
input.find("문자열") : input에서 "문자열" 이있는 인덱스를 리턴함. "문자열"이 없으면 string::npos(쓰레기값)을 리턴
input.replace(n,m,"문자열") : n번째 인덱스부터 n+m까지 "문자열"로 바꿈

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() {
    int sum = 0;
    for (int i = 0; i < 5; i++) {
        int n = 0;
        cin >> n;
        if (n <= 40) n = 40;
        sum += n;
    }
    cout << sum / 5;
}

문제설명

 

소스코드

#include<iostream>
using namespace std;
int main() 
{
	int arr[26] = { 0 }; int max = 0; int count = 0; int idx = 0;
	string input;
	cin >> input;
	for (int i = 0; i < input.length(); ++i)
	{
		input[i] = toupper(input[i]); //모두 대문자로 변환
		++arr[input[i] - 65]; //A-65는 0이고, Z-65는 25다
	}
	for (int i = 0; i < 26; ++i) if (arr[i] > max){ max = arr[i]; idx = i; } //가장 많이 사용된 알파벳 검사
	for (int i = 0; i < 26; ++i) if (max == arr[i]) ++count; //가장 많이 사용된 알파벳이 몇개인지 검사
	idx += 65; //idx + 65는 가장 많이 사용한 문자이다.
	if (count > 1) //가장 많이 사용된 알파벳이 2개 이상이면 ? 출력
	{
		cout << "?";
		return 0;
	}
	else cout << (char)idx;
}

 

풀이

  • 입력받은 문자열을 모두 대문자로 바꾼다.
  • 알파벳은 26개이므로 배열 26개를 선언한다.
  • 문자열을 검사하면서 해당하는 문자열의 배열의 값을 증가시킨다.
  • max와 idx에 가장 많이 사용된 배열의 값과 해당 인덱스를 저장한다.
  • 가장 많이 사용된 배열의 값이 2개 이상이면 ?를 출력한다.
toupper()함수는 알파벳을 대문자로 바꿔주는 함수이다.

문제설명

 

소스코드

#include<iostream>
using namespace std;
int main() 
{
	string input;
	cin >> input;
	for (int i = 0; i < input.length() / 2; ++i)
	{
		if (input[i] != input[input.length() - 1 - i])
		{
			cout << 0;
			return 0;
		}
	}
	cout << 1;
}

 

풀이

  • 문자열의 길이가 7이라고 한다면 0번째 인덱스와 6번째 인덱스, 1번째 인덱스와 5번째 인덱스... 이렇게 비교하면 된다.
  • for문은 0부터 문자열 길이의 / 2 까지만 반복하면된다. ex) i = 7 -> 3번 반복, i = 8 -> 4번 반복
  • input[input.length() - 1 - i] 이부분은 i가 증가할 수록 문자열 인덱스의 끝에서 점점 인덱스의 가운데를 비교하게 한다.

문제설명

 

소스코드

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

 

풀이

  • tolower()함수는 대문자를 소문자로 바꿔주는 함수이다.
  • 참고로 toupper()함수는 소문자를 대문자로 바꿔주는 함수이다.

tolower()함수의 내부구조는 아래와 같다.

int tolower(int c)
{
    if ((c >= 'A') && (c <= 'Z'))
    {
        c = c - 'A' + 'a';
    }
    return c;
}

 

toupper()함수의 내부구조는 아래와 같다.

int toupper(int c)
{
    if ((c >= 'a') && (c <= 'z'))
    {
        c = c - 'a' + 'A';
    }
    return c;
}

문제설명

 

소스코드

#include<iostream>
using namespace std;
int main() 
{
	int L, A, B, C, D, tmp1, tmp2;
	cin >> L >> A >> B >> C >> D;
	if (A % C != 0) tmp1 = (A / C) + 1;
	else tmp1 = A / C;
	if (B % D != 0) tmp2 = (B / D) + 1;
	else tmp2 = B / D;
	if (tmp1 > tmp2) cout << L - tmp1;
	else cout << L - tmp2;
}

문제설명

 

소스코드

#include<iostream>
using namespace std;
int main() 
{
	int arr[3];
	for (int i = 0; i < 3; ++i)
	{
		cin >> arr[i];
	}
	int tmp;
	for (int i = 0; i < 3; i++) { //버블정렬
		for (int j = i + 1; j < 3; j++) {
			if (arr[i] > arr[j]) {
				tmp = arr[j];
				arr[j] = arr[i];
				arr[i] = tmp;
			}
		}
	}
	for (int i = 0; i < 3; ++i)
	{
		cout << arr[i] << " ";
	}
}