본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+ Java언어 내용도 포함되어있습니다. )
https://school.programmers.co.kr/learn/courses/30/lessons/12909
1.문제설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다.
예를 들어"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고,
올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
-제한사항문자열 s의 길이 : 100,000 이하의 자연수문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
2. 문제해결 접근
- 괄호는 반드시 '('여는괄호와 ')' 닫는 괄호가 한쌍을 이루어야 한다
- 반복문을 사용해 문자열을 검사한다 문자열은 charAt();를 이용한다.
- 다시말해, 여는괄호와 닫는괄호의 차는 0이다. - 횟수를 담는 변수 cnt를 지정하여, 해당 문자가 나올때마다 횟수가 증감된다.
- 닫는괄호는 여는괄호보다 먼저 나올 수 없다. - 닫는괄호가 먼저 나올경우, 반복문을 빠져나간다.
- 여는괄호'('가 여러번 나오더라도 닫는 괄호')'가 갯수에 맞게 나오면 된다.
3.답안 : [언어 : java]
class Solution {
boolean solution(String s) {
// answer 초기값은 boolean으로 지정한다
boolean answer = false;
int count = 0;
// 반복문으로 문자열 s의 전구문을 확인하고 (charAt(i)으로 한글자씩 뽑아낼 수 있다.)
// 만약 ( 가 확인되면 count++
// 만약 ) 가 확인되면 count--
// count == 0 이면 answer = true;로 바꿔서 반환한다.
for (int i = 0; i < s.length(); i++) {
if( s.charAt(i) == '(' ) count++;
else if( s.charAt(i) == ')') count--;
if(count <0)break;
}
if(count == 0) answer = true;
System.out.println( count );
return answer;
}
}
4. C++ 답안
출제의도는 스택을 사용하는 문제이다.
#include<string>
#include <iostream>
#include <stack>
using namespace std;
bool solution(string s)
{
bool answer = true;
// 스택을 생성한다.
stack <char> st;
for(int i =0; i < s.size(); i ++){
// 여는괄호일경우 스택에 값을 저장한다 (push())
if(s[i]== '(') st.push(s[i]);
// 닫는괄호일경우,
else if(s[i]==')'){
//스택이 비어있거나, 스택 최상단에 여는괄호가 아닐경우, false를 반환하고 반복문을 빠져나간다
if(st.empty() || st.top()!='('){
answer = false; break;
}
st.pop();
}
}
if(!st.empty()) answer =false;
return answer;
}
5. C++ 문법 설명과 표현법
스택(stack)
https://hirodevelodiary.tistory.com/138
'알고리즘 > [프로그래머스]Lv.2' 카테고리의 다른 글
[프로그래머스]Lv2. 다음 큰 숫자 (1) | 2022.11.02 |
---|---|
[프로그래머스]Lv2. 최솟값 만들기 (0) | 2022.11.01 |
[프로그래머스]Lv2. 숫자의 표현 (0) | 2022.11.01 |
[프로그래머스]Lv2. JadenCase 문자열 만들기 (1) | 2022.11.01 |
[프로그래머스]Lv2. 피보나치 수 (0) | 2022.10.31 |