https://school.programmers.co.kr/learn/courses/30/lessons/12916
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
#include <string>
#include <iostream>
#include <string>
using namespace std;
bool solution(string s)
{
bool answer = true;
int cntp = 0;
int cnty = 0;
for (int i = 0; i < s.size(); i++)
{
//p=112, P=80, y=121, Y=89
int a = int(s[i]);
if (a == 112 || a == 80)
{
cntp++;
}
else if (a == 121 || a == 89)
{
cnty++;
}
}
if (cntp == cnty) answer = true;
else if (cntp == 0 && cnty == 0) answer = true;
else answer = false;
return answer;
}
int main()
{
string s;
s = "HappyPYy";
cout<< solution(s);
return 0;
}
좀 멀리 돌아간 느낌
#include <string>
bool solution(std::string s) {
int count = 0;
for (auto c : s)
count += (c == 'p' || c == 'P') ? 1 : (c == 'y' || c == 'Y') ? -1 : 0;
return !(count);
}
이게 최고인듯 !!! ㅋㅋㅋ 같은 c++인데... 간결 ㅋㅋ
메모리나 시간적으로 엄청난 단축 아닌듯??!?! 하지만 뭔가 들어간 에너지가!! 엄청난 차이인듯
삼항 오퍼레이터(ternary operator)를 저렇게도 쓸수 있구나~~
삼항 연산자는 조건에 따라 값을 반환하는 간단한 방식입니다:
조건 ? 참일 때 반환 값 : 거짓일 때 반환 값;
예:
int x = (a > b) ? 10 : 20;
// a > b가 참이면 x는 10, 거짓이면 x는 20
삼항 연산자는 거짓일 때 반환 값 부분에 또 다른 삼항 연산자를 추가하여 조건을 더 추가적으로 처리할 수 있습니다.
형태:
조건1 ? 값1 : (조건2 ? 값2 : 값3);
int result = (x > 10) ? 1 : (x < 5) ? -1 : 0;
// 조건1: x > 10이면 result는 1
// 조건2: x < 5이면 result는 -1
// 조건1과 조건2 모두 거짓이면 result는 0
count += (c == 'p' || c == 'P') ? 1 : (c == 'y' || c == 'Y') ? -1 : 0;
이 코드는 두 개의 조건을 중첩 삼항 연산자를 사용하여 처리하고 있습니다.
count += (c == 'p' || c == 'P') ? 1 : (c == 'y' || c == 'Y') ? -1 : 0;
count += (c == 'p' || c == 'P') ? 1 : 0;
// 조건 하나만 처리
count += (c == 'p' || c == 'P') ? 1 : (c == 'y' || c == 'Y') ? -1 : 0;
// 조건 두 개를 연속적으로 처리
주어진 코드:
count += (c == 'p' || c == 'P') ? 1 : (c == 'y' || c == 'Y') ? -1 : 0;
은 중첩 삼항 연산자를 사용하여 효율적으로 두 조건과 기본값을 처리하는 구조입니다. 이 구조는 다음과 동일한 역할을 합니다:
if (c == 'p' || c == 'P') {
count += 1;
} else if (c == 'y' || c == 'Y') {
count += -1;
} else {
count += 0;
}
삼항 연산자를 사용하면 이 코드를 한 줄로 간결하게 작성할 수 있습니다. 😊
새로운 조건 공부~~
간단한 기본 문제들이~~ 더 많은 공부가 될 때!!