<목차>
1. 문제설명
2. 풀이정리
3-1. string을 대문자로 변경하는 법
3-2. string을 소문자로 변경하는 법
4. find()함수를 이용하여 string에서 특정 문자 개수 찾기
4-1.문자열 검색
4-2. find()함수를 이용하여 string에서 특정 문자 개수 찾기
4-2-1. string::npos
5. 코드
1. 문제설명

2. 풀이정리
1. string s를 전체 소문자(또는 대문자)로 변경한다.
2. p의 개수를 계산한다.
3. y의 개수를 계산한다.
4. answer이 true인지 false인지 계산한다.
- pCount와 yCount가 모두 0인 경우: true
- pCount == yCount 인 경우: true
- pCount != yCount 인 경우: false
3-1. string을 대문자로 변경하는 법
topper함수를 이용한다.
이 함수는 문자열이 아닌 문자 하나하나를 바꿔주는 함수이기에, string 전체를 대문자로 변경하고 싶을 때에는 for문을 사용한다. 아래 예시를 참고하세용
std::toupper(int ch)
출력: HELLO WORLD#include <iostream> #include <string> using namespace std; int main() { string str = "Hello World"; for (int i = 0; i < str.size(); i++) { str[i] = toupper(str[i]); } cout << str << endl; return 0; }
3-2. string을 소문자로 변경하는 법
tolower함수를 이용한다.
이 함수는 문자열이 아닌 문자 하나하나를 바꿔주는 함수이기에, string 전체를 대문자로 변경하고 싶을 때에는 for문을 사용한다. 아래 예시를 참고하세용
std::tolower(int ch)
#include <iostream> #include <string> using namespace std; int main() { string str = "Hello World"; for (int i = 0; i < str.size(); i++) { str[i] = tolower(str[i]); } cout << str << endl; return 0; }출력: hello world
4. find()함수를 이용하여 string에서 특정 문자 개수 찾기
4-1.문자열 검색
| +find(c: char): int | 문자열에서 문자 c가 발견되는 최초 인덱스를 반환 |
| +find(c: char, index: int): int | index부터 찾아서 문자 c가 발견되는 최초 인덱스를 반환 |
| +find(s: string): int | 문자열에서 문자열 s가 발견되는 최초 인덱스를 반환 |
| +find(s: string, index: int): int | index부터 찾아서 문자열 s가 발견되는 최초 인덱스를 반환 |
4-2. find()함수를 이용하여 string에서 특정 문자 개수 찾기
find() 함수는 최초 발견된 위치를 반환하기 때문에 문자열에서 'p'가 몇 개 있는지 찾고싶으면 이렇게 사용하면 된다.
소문자 p의 개수 string s1("How many p are there"); while (s1.find('p', idx) != string::npos) { idx = s1.find('p', idx); pCount++; }
4-2-1. string::npos
string::npos 는 C++의 string 클래스에서 제공하는 상수로, 문자열에서 찾는 값이 없을 때 반환되는 값
s1.find('p', idx)는 문자열s1에서 인덱스idx부터 시작하여 문자 'p'를 찾는 것을 의미합니다.
만약 문자 'p'가 없다면 string::npos를 반환한다.
즉, string::npos 는 주로 문자열에서 특정 문자나 부분 문자열을 찾는 동작에서 찾는 내용이 없을 때의 반환값으로 사용된다.
5. 코드
내가 작성한 코드는 다음과 같다!
#include <iostream> #include <string> using namespace std; bool solution(string s) { // 변수 정의 int pCount = 0, yCount = 0; bool answer; // 문자열 s를 소문자로 변경한다 for (int i = 0; i < s.size(); i++) { s[i] = tolower(s[i]); } // 문자 p의 개수를 구한다 int idx = 0; while (s.find('p', idx) != string::npos) { idx = s.find('p', idx) + 1; pCount++; } // 문자 y의 개수를 구한다 idx = 0; while (s.find('y', idx) != string::npos) { idx = s.find('y', idx) + 1; yCount++; } // answer이 true인지 false인지 구한다 // pCount와 yCount가 0일 경우 if (pCount == 0 && yCount == 0) { answer = true; } else { // pCount != yCount 일 경우 if (pCount == yCount) { answer = true; } // pCount = yCount 일 경우 else if (pCount != yCount) { answer = false; } } return answer; } int main() { // 변수 정의 string s; // 사용자로부터 문자열 s를 입력받는다 cin >> s; // solution함수 호출 bool answer = solution(s); // answer을 출력한다 cout << boolalpha << answer; return 0; }
pass !
근데 다른 사람들 풀이 보니까, 내 코드가 터무니없이 긴 것이다..
물론 코드가 짧다고 무조건 좋은건 아니지만 효율성이 너무 떨어지는 듯한 ..ㅠ.ㅠ
더 분발하자~! 아자자아자자
'언어 > C++' 카테고리의 다른 글
| [백준1152] 단어의 개수- 미완성,재풀이예정 (0) | 2024.01.17 |
|---|---|
| [백준1547] 공 (1) | 2023.12.29 |
| [백준1267] 핸드폰 요금 (0) | 2023.12.28 |
| [백준 1085] 직사각형에서 탈출 (1) | 2023.12.27 |
| [백준 1934 / C++] 최소공배수 (1) | 2023.12.05 |

