내일배움캠프 Node.js 본캠프 39일차

김선우·2024년 10월 3일
post-thumbnail

알고리즘 문제 풀어보기

문자열 나누기

문제 설명

문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.

먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.

제한사항

1 ≤ s의 길이 ≤ 10,000
s는 영어 소문자로만 이루어져 있습니다.

풀이 코드

function solution(s) {
    var answer = 0;
    var stack = [];

    for(i=0; i< s.length; i++){
        stack.push(s[i]);

        const same = stack.filter((item) => item === stack[0]);
        const notsame = stack.filter((item) => item !== stack[0]);

        if(same.length === notsame.length){
            answer ++;
            stack = [];
        }
    }
    if(stack.length !== 0){
        answer++;
    }

    return answer;
}

풀이 과정

s의 길이만큼 반복하는 반복문에서 stack에 문자를 넣어줌 => filter()를 통해 기준 글자와 같지않은 글자배열을 만들고 이 둘의 길이가 같으면 answer값을 1증가 시킨 후 stack을 초기화, 해당 방식을 반복문이 끝날때 까지 반복해주고 반복문이 끝났을 때 stack의 길이가 0이 아니라면 answer값을 1증가 시킴.

주특기 심화 과정 웹소켓 실시간 게임

src/app.js


createServer를 통해 서버에서 필요한 정보를 가져와 웹 소켓에 init 해줌.
initSocket은 웹 소켓 연결을 위해 socket.js를 호출하는 것.

init/socket.js


new SocketIO로 만들어진 io 객체에 server정보를 집어넣고 핸들러로 넘어감.

handlers/register.handler.js


위의 부분에서 클라이언트 구동에 피룡한 user과 stage생성에 필요한 uuid를 생성 후 뿌림. 이후, socket.on을 통해 event라는 이름으로 데이터가 들어오면 io, socket, data정보를 가지고 handlerEvent를 실행.(접속해제 이벤트처리도 동일한 방식으로 진행됨)

handlers/helper.js


위의 socket.on에서 받은 event를 해당 handlerEvent함수에서 실행 후 검증 절차를 가지고 handlerMappings함수를 통해 전달받은 handler ID값으로 해당 핸들러 함수를 호출한다.

handlers/handlerMapping.js

만약 넘어온 handlerID값이 2라면 해당하는 gameStart함수가 실행되는 것이다.

0개의 댓글