
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
(), [], {} 는 모두 올바른 괄호 문자열입니다.
만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
s의 길이는 1 이상 1,000 이하입니다.
function solution(s) {
var answer = 0;
var stack = [];
var isCorrect = true;
if (s.length % 2 === 1) return 0;
for(i=0; i<s.length; i++){
var str = s.slice(i) + s.slice(0,i);
isCorrect = true;
for(n of str){
if(n === "[" || n === "{" || n === "(" ){
stack.push(n);
}else{
var opening = stack.pop();
if (opening === "(" && n === ")") continue;
if (opening === "{" && n === "}") continue;
if (opening === "[" && n === "]") continue;
isCorrect = false;
break;
};
};
if (isCorrect) answer++;
};
return answer;
};
확인을 위해 값을 넣어줄 stack, 짝이 맞는 경우를 확인해줄 isCorrect 생성. 만약 주어진 문자열이 홀수인 경우에는 바로 0을 리턴해준다. 문자열을 계속 왼쪽으로 한 칸씩 회전하도록 반복문을 만들고 또다시 반복문으로 [ , { , ( 인지 확인하는 조건문을 사용해 맞다면 stack에 push해준다. 아니라면 stack에 쌓여있는 데이터중 마지막을 꺼내서 짝이맞는지 확인한다. 이때 짝이 맞으면 계속진행하고, 맞지 않으면 isCorrect를 false로 만들고 break해준다. 이후 짝이 맞으면 answer값을 늘려주고 answer를 리턴해준다.
해설 영상을 보고 만들어서 실행하던 중에
const user = gameSession.getUser(userId);
if(!user){
console.error('user not found');
}
부분에 해당하는 문제가 발생했다. 곧바로 문제의 부분을 확인하기 위해 위의 gameSession.getUser(userId)를 console.log로 찍어본 결과, 다른값들은 다 정상적으로 들어오는데 user의 id부분이 정의되지않았다.
이번에도 문제를 못찾겠어서 튜터님을 찾아갔는데...
const initialHandler = async ({socket, userId, payload}) => {
try{
const { deviceid, latency, playerId} = payload;
const user = addUser(socket, deviceid, playerId, latency);
const gameSession = getGameSession();
gameSession.addUser(user);
const initialResponse = createResponse(
HANDLER_IDS.INITIAL,
RESPONSE_SUCCESS_CODE,
{userId: deviceid,}
);
socket.write(initialResponse);
}catch(e){
console.error(e);
}
};
해당 부분의 deviceId의 i가 대문자가 아닌 소문자였다...
initial.proto에서는 대문자로 해놓고... 이러니까 당연히 받아온걸 인식못해서 정의되지 않았다고하지..
이틀 연속으로 오타를 못찾아서 튜터님을 찾아가다니.. 너무 부끄럽다..
위의 취소선 부분이 잘못된 부분이었는데, 해당 부분을 '네트워크 또는 서버에 가해지는 부하 트래픽을 분산시켜주는 기술을 의미.' 라고만 했어도 좋았을 것 같다.