반응형
문제 풀어보기는 여기서!
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
더보기
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예sanswer
"()()" | true |
---|---|
"(())()" | true |
")()(" | false |
"(()(" | false |
입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
ddd문제 해결 keyPoint
문제 해결 keyPoint
- '(' 는 ')' 와 함께 페어를 이루어야 한다. 단, ')', '(' 는 안되고 오로지 '(', ')' 순으로만 가능하다.
- Stack을 이용해보자.
- 이전에 풀었던 같은 단어와는 달리 순서가 정해져 있기 때문에, for문을 돌다가 무조건 false가 되는 조건들이 있다.
20220913 1차시도
더보기

아 뭐야 슈방..
아!... 뭐지... 예전에 인접한 같은 두개의 단어 지우기 처럼 했는데 효율성 초과 나옴.. 아쒸 뭐야..
for문이 하나밖에 없는데 시간초과라고??... 아나 쒸//
import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> stack = new Stack<>();
char[] chars = s.toCharArray();
stack.push(chars[0]);
for(int i=1; i<chars.length; i++){
if(stack.isEmpty()){
stack.push(chars[i]);
continue;
}
int subs = chars[i]-0;
int target = stack.peek();
if(target-subs == -1){
stack.pop();
}else{
stack.push(chars[i]);
}
}
answer = stack.isEmpty() ? true : false;
return answer;
}
}

20220913 2차시도
더보기

프로그래머스 이상함 ㅡㅡ
솔직히.. 이번 문제는 좀 에바라고 생각한다.
중간중간 바로 return false로 탈출 해주었는데, 이전 로직에도 추가했을때는 시간초과가 나왔었다...
게다가 마지막 'answer = stack.isEmpty();' 이 부분도 위의 소스코드에서 answer = stack.isEmpty(); 로 바꾸니까 시간초과가 났다. 날수가 없지 않나?....
import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++){
if(stack.isEmpty()){
if(s.charAt(i) != '('){
return false;
}
stack.push(s.charAt(i));
continue;
}
if(s.charAt(i) == ')'){
stack.pop();
}else{
if(s.charAt(i) != '('){
return false;
}
stack.push(s.charAt(i));
}
}
answer = stack.isEmpty();
return answer;
}
}

반응형
'알고리즘' 카테고리의 다른 글
프로그래머스[1292] - 숫자의 표현 (lv2) (0) | 2022.09.15 |
---|---|
프로그래머스[43165] - 타겟 넘버(lv2) (0) | 2022.09.14 |
프로그래머스[12914] - 멀리 뛰기(lv2) (0) | 2022.09.12 |
프로그래머스[12941] - 최솟값 만들기(lv2) (0) | 2022.09.12 |
프로그래머스[12973] - 짝지어 제거하기(lv2) (1) | 2022.09.11 |