문제

 

풀이

map 자료구조를 통해 등급을 key, 등급에 따른 과목평점을 value로 저장하고 등급이 P인 경우를 제외한 각 입력에서 학점과 학점 x 과목평점을 구한 뒤 학점 x 과목평점을 학점으로 나눈 값을 출력한다.

#include <iostream>
#include <string>
#include <map>

using namespace std;

map<string, double> m;


int main() {
	string course, grade;
	double score, score_sum = 0, result = 0;
	
	m.insert({ "A+", 4.5 });
	m.insert({ "A0", 4.0 });
	m.insert({ "B+",3.5 });
	m.insert({ "B0", 3.0 });
	m.insert({ "C+", 2.5 });
	m.insert({ "C0", 2.0 });
	m.insert({ "D+", 1.5 });
	m.insert({ "D0", 1.0 });
	m.insert({ "F", 0.0 });

	for (int i = 0; i < 20; i++) {
		cin >> course >> score >> grade;
		
		if (grade == "P") continue;

		score_sum += score;

		result += score * m[grade];
	}

	cout << fixed;
	cout.precision(6);

	cout << result / score_sum;
	
	return 0;
}

'백준 > 심화' 카테고리의 다른 글

1316: 그룹 단어 체커 / C++  (0) 2023.03.09
2941: 크로아티아 알파벳 / C++  (0) 2023.03.09
4344: 평균은 넘겠지 / C++  (0) 2023.03.09
1157: 단어 공부 / C++  (0) 2023.03.09
10988: 팰린드롬인지 확인하기 / C++  (0) 2023.03.09

문제

 

풀이

bool형 배열을 통해 해당 문자가 처음 등장한 것이라면 해당 알파벳의 번호에 해당하는 인덱스를 true로 바꿔주고, 이미 등장한 적이 있었다면 해당 문자가 앞에 있는 문자와 다르다면 cnt를 증가시키고 break하고 같다면 continue한다.

이후 단어의 총 개수 num에서 그룹 문자가 아닌 문자의 개수 cnt를 뺀 값을 출력한다. 

#include <iostream>
#include <string>

using namespace std;

int main() {
	int num, cnt = 0;
	string s;

	cin >> num;

	for (int i = 0; i < num; i++) {
		bool alpha[26] = { false };
		
		cin >> s;

		for (int j = 0; j < s.length(); j++) {
			if (alpha[s[j] - 'a'] == false) {
				alpha[s[j] - 'a'] = true;
			}
			else if (alpha[s[j] - 'a'] == true) {
				if (s[j] != s[j - 1]) {
					cnt++;
					break;
				}
				else
					continue;
			}
		}
	}

	cout << num - cnt;
	
	return 0;
}

'백준 > 심화' 카테고리의 다른 글

25206: 너의 평점은 / C++  (0) 2023.03.09
2941: 크로아티아 알파벳 / C++  (0) 2023.03.09
4344: 평균은 넘겠지 / C++  (0) 2023.03.09
1157: 단어 공부 / C++  (0) 2023.03.09
10988: 팰린드롬인지 확인하기 / C++  (0) 2023.03.09

문제

 

풀이

위의 크로아티아 알파벳들을 문자열 배열을 통해 저장해둔 뒤, 입력받은 문자열에서 해당 원소들과 일치하는 문자열을 찾아 기타 다른 문자로 바꾼 뒤 문자열의 길이를 출력하였다.

#include <iostream>
#include <string>

using namespace std;

int main() {
	string s, tmp;
	string croatian[8] = { "c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" };

	cin >> s;

	for (int i = 0; i < 8; i++) {
		while (true) {
			int idx = s.find(croatian[i]);

			if (idx == string::npos)
				break;

			s.replace(idx, croatian[i].length(), "#");
		}
	}

	cout << s.length();

	return 0;
}

'백준 > 심화' 카테고리의 다른 글

25206: 너의 평점은 / C++  (0) 2023.03.09
1316: 그룹 단어 체커 / C++  (0) 2023.03.09
4344: 평균은 넘겠지 / C++  (0) 2023.03.09
1157: 단어 공부 / C++  (0) 2023.03.09
10988: 팰린드롬인지 확인하기 / C++  (0) 2023.03.09

문제

 

풀이

평균을 구한 후 평균과 비교해서 평균보다 큰 인원의 수를 구한 뒤 이를 이용해 평균을 넘는 인원들의 비율을 출력한다.

#include <iostream>

using namespace std;

int main() {
	int n, studentNum;

	cin >> n;

	for (int i = 0; i < n; i++) {
		int sum = 0, avg = 0, count = 0;
		int score[1000] = { 0 };
		double rate = 0;

		cin >> studentNum;

		for (int j = 0; j < studentNum; j++) {
			cin >> score[j];
			sum += score[j];
		}

		avg = sum / studentNum;

		for (int j = 0; j < studentNum; j++)
			if (score[j] > avg) count++;

		rate = ((double)count / studentNum) * 100;

		cout << fixed;
		cout.precision(3);
		cout << rate << "%\n";
	}

	return 0;
}

'백준 > 심화' 카테고리의 다른 글

1316: 그룹 단어 체커 / C++  (0) 2023.03.09
2941: 크로아티아 알파벳 / C++  (0) 2023.03.09
1157: 단어 공부 / C++  (0) 2023.03.09
10988: 팰린드롬인지 확인하기 / C++  (0) 2023.03.09
10812: 바구니 순서 바꾸기 / C++  (0) 2023.03.09

문제 

풀이

일단 알파벳의 총 갯수만큼의 크기를 가지는 배열을 0으로 초기화해서 선언 후 모든 문자를 대문자로 변환시켜준다.

이후 각 알파벳의 번호를 인덱스로 가지는 값을 증가 시킨 다음, 가장 많이 사용된 알파벳의 사용 횟수와 인덱스를 저장하고 가장 많이 사용된 알파벳의 사용 횟수와 동일한 사용 횟수를 가지는 알파벳이 있는지 판별 후 가장 많이 사용된 알파벳의 개수가 1보다 크면 ?, 그렇지 않으면 해당 알파벳을 출력한다.

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() {
	string s;
	int max = 0, idx = 0, cnt = 0;
	int alpha[26] = {0};

	cin >> s;

	transform(s.begin(), s.end(), s.begin(), ::toupper);

	for (int i = 0; i < s.length(); i++)
		alpha[s[i] - 65]++;

	for (int i = 0; i < 26; i++)
		if (max < alpha[i]) {
			max = alpha[i];
			idx = i;
		}

	for (int i = 0; i < 26; i++)
		if (max == alpha[i]) cnt++;

	if (cnt > 1) cout << "?";
	else cout << (char)(idx + 65);

	return 0;
}

'백준 > 심화' 카테고리의 다른 글

2941: 크로아티아 알파벳 / C++  (0) 2023.03.09
4344: 평균은 넘겠지 / C++  (0) 2023.03.09
10988: 팰린드롬인지 확인하기 / C++  (0) 2023.03.09
10812: 바구니 순서 바꾸기 / C++  (0) 2023.03.09
2444: 별 찍기 - 7 / C++  (0) 2023.03.09

문제

 

풀이

입력받은 문자열 s1을 문자열 s2에 뒤집어서 저장한 후 s1과 s2가 같은지 판별하여 1 또는 0을 출력하면 된다.

#include <iostream>
#include <string>

using namespace std;

int main() {
	string s1, s2;

	cin >> s1;

	for (int i = 0; i < s1.length(); i++)
		s2 += s1[s1.length() - i - 1];

	if (s1 == s2) cout << 1;
	else cout << 0;

	return 0;
}

'백준 > 심화' 카테고리의 다른 글

4344: 평균은 넘겠지 / C++  (0) 2023.03.09
1157: 단어 공부 / C++  (0) 2023.03.09
10812: 바구니 순서 바꾸기 / C++  (0) 2023.03.09
2444: 별 찍기 - 7 / C++  (0) 2023.03.09
3003: 킹, 퀸, 룩, 비숍, 나이트, 폰 / C++  (0) 2023.03.09

문제

 

풀이

배열에서 begin부터 end까지 mid를 기준으로하여 회전시켜줘야하므로 rotate 함수를 이용하였다.

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
	int n, m, begin, end ,mid;
	int arr[101];

	cin >> n >> m;

	for (int i = 1; i <= n; i++)
		arr[i] = i;

	for (int i = 0; i < m; i++) {
		cin >> begin >> end >> mid;

		rotate(arr + begin, arr + mid, arr + end + 1);
	}

	for (int i = 1; i <= n; i++)
		cout << arr[i] << " ";

	return 0;
}

'백준 > 심화' 카테고리의 다른 글

1157: 단어 공부 / C++  (0) 2023.03.09
10988: 팰린드롬인지 확인하기 / C++  (0) 2023.03.09
2444: 별 찍기 - 7 / C++  (0) 2023.03.09
3003: 킹, 퀸, 룩, 비숍, 나이트, 폰 / C++  (0) 2023.03.09
25083: 새싹 / C++  (0) 2023.03.09

문제

예제

 

풀이

#include <iostream>

using namespace std;

int main() {
	int num;

	cin >> num;

	for (int i = 0; i < num; i++) {
		for (int j = 0; j < num - (i + 1); j++)
			cout << " ";

		for (int j = 0; j < 2 * i + 1; j++)
			cout << "*";

		cout << "\n";
	}

	for (int i = 0; i < num - 1; i++) {
		for (int j = 0; j < i + 1; j++)
			cout << " ";

		for (int j = 0; j < 2 * (num - i) - 3; j++) {
			cout << "*";
		}

		cout << "\n";
	}

	return 0;
}

'백준 > 심화' 카테고리의 다른 글

1157: 단어 공부 / C++  (0) 2023.03.09
10988: 팰린드롬인지 확인하기 / C++  (0) 2023.03.09
10812: 바구니 순서 바꾸기 / C++  (0) 2023.03.09
3003: 킹, 퀸, 룩, 비숍, 나이트, 폰 / C++  (0) 2023.03.09
25083: 새싹 / C++  (0) 2023.03.09

+ Recent posts