반응형
이번 문제는 처음보는 새로운 문제!
그래서 좀 더 시간이 오래 걸렸다.
맨 처음에 문제를 보자마자 음! 정규식을 풀면 쉽겠다 해서 아래 코드를 작성했다.
1차 코드
class Solution {
boolean solution(String s) {
String target = "()";
while(s.contains(target)) {
if(s.charAt(0) == ')') return false;
s = s.replaceAll("\\(\\)", "");
}
return s.length() == 0;
}
}
첫 번째 코드는 효율성 테스트에서 모든 케이스에서 실패가 떨어졌다.
뭐가 문제일까 생각해보다가 조금 더 빨리 끝낼 수 있는 경우가 있을까 하다가
‘(’와‘)‘의 개수가 똑같지 않으면 어차피 false이므로 while문을 돌기 전에 개수를 체크해줘봤다.
2차 코드
class Solution {
boolean solution(String s) {
String target = "()";
String left = s.replaceAll("\\)", "");
String right = s.replaceAll("\\(", "");
if(left.length() != right.length()) return false;
while(s.contains(target)) {
if(s.charAt(0) == ')') return false;
s = s.replaceAll("\\(\\)", "");
}
return s.length() == 0;
}
}
나름 기능을 더해서 그런지 이번에 효율성 체크는 하나 통과되었다.
그리고 이렇게,,저렇게,,,더 손 봤는데 도저히 답이 내려지지 않았다.
그러다가 생각해 낸 것!! 에라토스테네스의 체를 사용한 프로그래머스 문제에서 int 타입 변수로
속도를 획기적으로 줄였던 것이 생각나서 이를 응용해보기로 했다.
먼저, ‘(’ 방향은 +를 해준다.
‘)’ 방향은 -를 해준다.
그러다가 음수가 나올 시, 이 문자열은 무조건 틀린 문자열이라 false이다.
통과 코드
class Solution {
boolean solution(String s) {
int answer = 0;
for(int i = 0 ; i < s.length(); i++) {
char c = s.charAt(i);
if(c == '(') answer++;
else answer--;
if(answer < 0) return false;
}
return answer == 0 ? true :false;
}
}
그리고 for문을다 돌았을 경우 answer가 0이 아니면 이것 또한 틀린 문자열이므로 false를 반환하면 된다.
효율성 테스트까지 해결 완!!
점수까지 4점받음! 굿
즐거운 명절!
오늘도 즐거ㅓㅓ운 코딩……
반응형