초보 개발자의 이야기, 릿허브

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

코딩테스트/📘 프로그래머스 (programmers)

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

릿99 2021. 8. 12. 09:24
728x90
반응형
1. 문제이해

코딩테스트 연습 - 문자열 내 p와 y의 개수 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr

 

주어진 문자열 s에서 p와 y의 개수가 같으면 true, 다르면 false를 반환하는 알고리즘을 구현하는 것이 목표이다.

 

 

 

2. 문제풀이

 

문자열 s 내의 p와 y의 개수가 같은지 다른지를 출력하는 프로그램이다.

한가지 주의해야 할 점은 true, false를 출력하는 것이 아닌, 반환하는 것이라는 점에 있다.

프로그래머스는 처음 시작할 때 기본적인 틀을 제공하는데, 여기서는 다음 그림과 같이

bool solution(string s) {} 라는 을 제공해주어 그대로 사용했다.

 

문자열 s내의 p와 y의 개수가 같은지를 확인하기 위해,

문자열의 처음부터 마지막까지 p가 나오면 count, y가 나오면 따로 count 해주는 방식을 채택했다.

 

 

 

3. 소스코드
#include <cstring>
#include <iostream>
using namespace std;

bool solution(string s) {
	bool check;
	int countp = 0;
	int county = 0;

	for (int i = 0; i < s.size(); i++) {
		if (s[i] == 'P' || s[i] == 'p') {
			countp++;
		}
		if (s[i] == 'Y' || s[i] == 'y') {
			county++;
		}
	}

	if (countp == county || (countp == 0 && county == 0)) {
		check = true;
	}
	else {
		check = false;
	}

	return check;
}

위에서 주어진 틀에 맞추어 코드를 작성했다.

(다 삭제하고 int main()으로 하고 반환이 아닌 출력 방식을 선택했더니 에러가 났다.

bool solution의 매개변수인 string s를 삭제하고 따로 입력받았더니, 그것 또한 에러가 났다.)

for문과 if문을 통해, 입력받은 문자열 내에 p와 y가 존재하는지 확인하고, (대소문자는 구분하지 않았다.)

존재하면 각각 countp, county를 증감시켜주었다.

이후 마지막 if-else문을 통해 countp와 county의 개수가 같으면,

즉, 문자열 내의 p와 y의 개수가 같으면 true, 아니면 false를 반환해주었다. (둘다 0일때도 true를 반환해주었다.)

 

 


프로그래머스는 처음 시도해봤는데, 백준보다 까다로운것같은 느낌이 들었다..

무조건 정해진 을 써야한다니...😶

앞으로 더 풀어봐야 알겠지만, 일단 오늘은 문제가 많이 어렵지 않아 금방 코드를 고칠 수 있었던 것 같다.

728x90
반응형