[etc] 올바른 괄호 , 구명보트
올바른 괄호
내풀이 1
function solution(s){
var answer = true;
s = s.replace(/ /g,'');
while(true){
s = s.replace(/\(\)/,"");
if( s.length <= 2) break;
}
return ( s == '()' || s == "" );
}
/*
테스트케이스는 전부 통과하지만
효율성테스트에 통과하지 못했다.
아마 while때문인것 같다.
*/
내풀이 2
가만 생각해보니 앞에서부터 하나씩 뺴와서 앞에꺼랑 뒤에께 ()이면 사라진다……
이거 완전 스택이다.
function solution(s){
var answer=[]
s = s.replace(/ /g,''); //공백제거
for( var i=0; i<s.length; i++){
if( answer.length == 0 ){
answer.push( s[i] );
continue;
};
if( answer[answer.length-1] == "(" && s[i]==")" ){
answer.pop(); // () 된다면 마지막꺼 뺴주고
continue;
};
if( answer[answer.length-1] == "(" && s[i]==")" ){
answer.pop(); // () 된다면 마지막꺼 뺴주고
continue;
};
answer.push( s[i] );
};
return answer.length != 0 ? false : true;
}
구명보트
고민
처음 문제를 해결 풀때.. 가장 적게 구명보트를 이용하는걸로 생각을 해서
[40,40,50,60,70] 의 limit가 150이라고 하면 [40,40,50],[60,70] 이런식으로
하나의 구명보트의 2명 이상을 태우려고 했다.
그렇게 한참 씨름을 하다 문제를 다시 읽어보니 최대 2명 …
나는 언제나 마음만 급하고, 빨리 끝내고 배그나 할 생각만 하니깐..이렇게 실수를 한다.
내풀이
function solution(people, limit) {
var answer = 0;
//사람배열 을 정렬한다
people.sort(function(a,b){
return b-a;
});
var start=0;
var end=people.length;
while(start<end){
// 맨 앞의값과 맨 뒤의값을 더해서 한도초과하는지 확인
if( people[start] + people[end] > limit ){
start++;
}else{
start++;
end--;
};
// 구명보트 하나 떠남
answer++;
if( start == end ) answer++;
}
return answer;
}