https://school.programmers.co.kr/learn/courses/30/lessons/12951

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[C++][프로그래머스][Lv2] 12951. JadenCase 문자열 만들기

 


❗주의할 점

1. 공백문자가 여러개 올 수 있다.

2. 공백문자 끝날 수 있다.

이 부분 예외를 생각못해서 테스트에서 막혔었다....

 

✅사용한 헤더파일, 함수

: #include <cctype>의 toupper() ,  tolower()

#include <cctype>

// 1. 대문자로 변경
char temp = 'a';
char uppderCase = toupper(temp);   // A

// 2. 소문자로 변경
char temp2 = 'A';
char lowerCase = tolower(temp2);    // a

 

✅풀이방법 

#include <string>
#include <vector>

using namespace std;

string solution(string str) {
    string answer = "";
    
    string temp = "";
    for(int i = 0; i <str.length(); i++)
    {
        // 공백이면 ?
        if (str[i] == ' ')
        {
            // temp가 비어있을 때
            if (temp.empty())
            {
                answer += " ";
                continue;
            }

            // temp가 안 비어있을 때 
            else 
            {
                answer += toupper(temp[0]);
                for (int j = 1; j < temp.size(); j++)
                    answer += tolower(temp[j]);
                answer += " ";
                
                temp.clear();
            }
        }
        else
            temp += str[i];
    }

    // 끝났는데 temp가 안비어있으면 ? -> 마지막이 문자열로 이루어져있으면
    if (!temp.empty())
    {
        answer += toupper(temp[0]);
        for (int j = 1; j < temp.size(); j++)
            answer += tolower(temp[j]);
    }
    return answer;
}

 


https://github.com/kimYouChae/C-Programmers

 

GitHub - kimYouChae/C-Programmers

Contribute to kimYouChae/C-Programmers development by creating an account on GitHub.

github.com

https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[C++][프로그래머스][Lv2] 12909. 올바른 괄호


❗주의할점

  : 괄호 확인을 한 후 (for문을 빠져나오면) stack에 괄호가 남아있으면 false

  : stack의 top()을 사용할 때는 stack이 비어있는지 확인해야 한다.

 ✅ 사용한 자료구조 

 : stack을 사용해서 풀이 (stack 이나 queue , dequeue등의 자료구조를 사용해도 된다.)

 

#include <string>
#include <iostream>
#include <stack>

using namespace std;

bool solution(string s)
{
    bool answer = true;
    
    stack<char> stack;
    for (int i = 0; i < s.length(); i++) 
    {
        // 0. 괄호 시작이면 ? -> 담아두기
        if (s[i] == '(')
            stack.push('(');

        // 1. 괄호 끝이면 ? 
        else if (s[i] == ')')
        {
            // stack 검사해서 맨 위에 '('가 있는지 ?
            if ( stack.size() != 0 && stack.top() == '(')
            {
                // stack에서 꺼내기
                stack.pop();
            }
            else
            {
                answer = false;
                break;
            }
        }
    }
    
    // 끝나고 stack이 비어있지 않으면 -> false
    if (stack.size() != 0)
        answer = false;

    return answer;
}

 

➕ 만약 stack의 top을 비교할 때 , stack.size() != 0 라고 체크를 안 해주면 테스트케이스 18번에서 (signal : segmentation fault ) 오류가 뜨게된다.

 

❓왜 오류가 나지 ?

 :  stack.top()함수는 stack의 가장 위에 있는 요소를 return 하는데, 비어있을 때 호출하면 '정의되지 않은 동작'이 발생할 수 있음 (=예외가 발생할 수 있음 ) 

 

❗조건 비교 순서도 중요하다 

: && 연산자는 '단락 평가'(sort - circuit evaluation)를 사용하기 때문이다. 

: 단락평가란 ?

▶️두개 이상의 논리 연산을 진행할 때 첫번째 값만으로 결과가 정해지면, 두번째 값은 평가 하지 않는다.

if ( stack.size() != 0 && stack.top() == '(')

: stack의 size가 0 이면, && 뒤의 조건은 평가 되지 않는다. 

if ( stack.top() == '(' && stack.size() != 0 )

: stack의 size를 검사하는 조건이 있음에도,  이 조건문은 예외가 발생할 수 있다. 


https://github.com/churush912837465

 

churush912837465 - Overview

churush912837465 has 4 repositories available. Follow their code on GitHub.

github.com

 

https://school.programmers.co.kr/learn/courses/30/lessons/12939

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[C++][프로그래머스][Lv2] 12939. 최댓값과 최솟값


❗주의해야할 점

: 숫자가 한자리일 거란 보장이 없다. (제한조건에 적혀있지 않음) , 나눌 때 주의하자

 

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

string solution(string s) {
    string answer = "";
    
    string temp = ""; 
    vector<int> _vec;
    for (int i = 0; i < s.length(); i++) 
    {
        // 빈칸이면 ?
        if (s[i] == ' ')
        {
            _vec.push_back(stoi(temp));
            temp="";
        }
        else
            temp += s[i];
    }

    _vec.push_back(stoi(temp));
    
   // 정렬
    sort(_vec.begin(), _vec.end());

    answer += to_string(_vec.front());
    answer += " ";
    answer += to_string(_vec.back());

    return answer;
}

 

➕ for문으로 최대값과 최소값 구하는것을 피하기 위해서 <algorithm>헤더의 sort를 사용하였다.


https://github.com/churush912837465

 

churush912837465 - Overview

churush912837465 has 4 repositories available. Follow their code on GitHub.

github.com

 

+ Recent posts