상세 컨텐츠

본문 제목

항해 99 ! Day 1/ 프로그래머스 / 12916/ 중첩 삼항 연산자 (Nested Ternary Operator)

cote

by geminanolja 2025. 1. 13. 17:09

본문

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;

이 코드는 두 개의 조건을 중첩 삼항 연산자를 사용하여 처리하고 있습니다.

분해해서 분석하기:

  1. 첫 번째 조건: (c == 'p' || c == 'P')
    • 문자 c가 'p' 또는 'P'라면 1을 반환합니다.
  2. 두 번째 조건: (c == 'y' || c == 'Y')
    • 첫 번째 조건이 거짓이고, 문자 c가 'y' 또는 'Y'라면 -1을 반환합니다.
  3. 기본값: 0
    • 위 두 조건이 모두 거짓이면 0을 반환합니다.

실제 작동 과정

코드:

count += (c == 'p' || c == 'P') ? 1 : (c == 'y' || c == 'Y') ? -1 : 0;

흐름:

  1. 첫 번째 조건 (c == 'p' || c == 'P') 확인:
    • 참이면 1을 반환하고, 더 이상 조건을 확인하지 않음.
    • 거짓이면 두 번째 조건 (c == 'y' || c == 'Y')로 넘어감.
  2. 두 번째 조건 (c == 'y' || c == 'Y') 확인:
    • 참이면 -1을 반환.
    • 거짓이면 기본값 0을 반환.

비교: 단순 삼항 vs 중첩 삼항

단순 삼항:

count += (c == 'p' || c == 'P') ? 1 : 0;
// 조건 하나만 처리
  • 단순히 'p' 또는 'P'인 경우만 처리하고 나머지는 0으로 처리.

중첩 삼항:

count += (c == 'p' || c == 'P') ? 1 : (c == 'y' || c == 'Y') ? -1 : 0;
// 조건 두 개를 연속적으로 처리
  • 'p' 또는 'P'는 1, 'y' 또는 'Y'는 -1, 그 외는 0으로 처리.

장점

  • 코드 간결성: 여러 조건을 하나의 줄에 표현할 수 있어 가독성이 좋음.
  • 효율성: 조건을 순차적으로 평가하므로, 첫 번째 조건이 참이면 나머지는 평가하지 않음.
  • 유연성: 여러 조건을 처리하면서도 기본값을 지정할 수 있음.

정리

주어진 코드:

count += (c == 'p' || c == 'P') ? 1 : (c == 'y' || c == 'Y') ? -1 : 0;

은 중첩 삼항 연산자를 사용하여 효율적으로 두 조건과 기본값을 처리하는 구조입니다. 이 구조는 다음과 동일한 역할을 합니다:

같은 논리를 if-else로 표현:

if (c == 'p' || c == 'P') {
    count += 1;
} else if (c == 'y' || c == 'Y') {
    count += -1;
} else {
    count += 0;
}

삼항 연산자를 사용하면 이 코드를 한 줄로 간결하게 작성할 수 있습니다. 😊

 

 

새로운 조건 공부~~ 

간단한 기본 문제들이~~ 더 많은 공부가 될 때!!