[프로그래머스/C++] ㅡ LV1 - 문자열 내 p와 y의 개수

2021. 3. 13. 10:39필요/코딩테스트(프로그래머스)

문제

programmers.co.kr/learn/courses/30/lessons/12916

 

코딩테스트 연습 - 문자열 내 p와 y의 개수

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를

programmers.co.kr

풀이

#include <string>
#include <iostream>
using namespace std;

bool solution(string s)
{
    bool answer = true;
    int cntp=0, cnty=0;
    for (int i=0; i<s.size(); i++)  {
        if (s[i] == 'p' || s[i] == 'P')   cntp++;
        if (s[i] == 'y' || s[i] == 'Y')   cnty++;   
    }
    if (cntp != cnty) answer = false;
    return answer;
}

풀이

string은 각 인수를 통해 문자에 접근할 수 있기에, 나머지는 if문을 통해 p와 y의 개수를 찾아주면 된다.

 


+a

위 풀이에 앞서 string이 개별 문자를 참조하기 불가능한 줄 알고, string -> char 로 변환해서 문제를 해결했었다.

 

string.h 라이브러리를 통해 strcpy(a, b) 를 할 수 있다.

이는 char 배열로 만들어진 문자열을 복사하는 함수이다. b의 값이 a에 복사된다.

 

문자열을 char 배열로 바꿔주는 c_str() 매서드를 사용한다.

#include <string.h>
#include <iostream>
using namespace std;

bool solution(string s)
{
    bool answer = true;
    int cntp=0, cnty=0;
    char ch[51];
    strcpy(ch, s.c_str());	// 문자열 -> char 배열로 변환
    for (int i=0; i<s.size(); i++)  {
        if (ch[i] == 'p' || ch[i] == 'P')   cntp++;
        if (ch[i] == 'y' || ch[i] == 'Y')   cnty++;
    }
    if (cntp != cnty) answer = false;
    return answer;
}