정말 오랜만에 다시 코테를 연습하려고 한다!!
너무 오랜만이라 감이 안왔지만 차근차근 조건을 생각해보며 풀어봤다.
조건을 생각해보면,
조건1. )로 시작하면 안됨.
조건2. (로 끝나면 안됨.
조건3. (갯수와 )갯수는 같아야함.
조건4. 앞에서부터 차례로 볼때, ( 하면 cnt ++, ) 하면 cnt--, 그런데 cnt가 마이너스가 되는경우엔 false.(닫는괄호가 더많이 나왔다는 뜻)
그래서 처음 짰던 코드는
class Solution {
boolean solution(String s) {
if(s.charAt(0)==')'){
return false;
}
if(s.charAt(s.length()-1)=='('){
return false;
}
int cnt = 0;
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == '('){
cnt++;
}else{
cnt--;
}
}
if(cnt == 0){
return true;
}else{
return false;
}
}
}
이렇게 했는데 효율성도 통과했는데 정확도가 자꾸 두개가 틀려서 왜그러지 하면서 다시 천천히 생각해보니, 조건4를 적용을 시키지 않았다. 이렇게되면 중간에 ) 가 더많이 나와도 갯수만 같으면 true를 반환해버리는것이었다.
그래서 조건4를 추가한 코드를 짰더니 바로 통과했다.
class Solution {
boolean solution(String s) {
if(s.charAt(0)==')'){
return false;
}
if(s.charAt(s.length()-1)=='('){
return false;
}
int cnt = 0;
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == '('){
cnt++;
}else{
cnt--;
}
//이부분이다. 조건4
if(cnt < 0){
return false;
}
}
if(cnt == 0){
return true;
}else{
return false;
}
}
}
저기 주석처리한부분을 추가했다. cnt가 마이너스가 되는 순간 바로 false를 반환한다.
역시 코테는 재밌다. 조건을 항상 생각하고 코드에 모든 조건이 있는지를 생각해야한다.