[TIL] 24.10.08 TUE

GDORI·2024년 10월 8일
0

TIL

목록 보기
65/79
post-thumbnail

오늘 푼 알고리즘 코드카타

92335. k진수에서 소수 개수 구하기

풀이

위 문제는 주어진 n을 3진수로 바꾸고 0P0 / P0 / 0P / P 기준 P가 소수인지 판별하는 문제이다.
예시로 437674가 들어왔을경우 3진수로 변환하면 221020101011 이고 0을 /로 바꿨을 때 221/2/1/1/11 이 된다.
저 중 소수의 갯수만 구해주면 되는 문제로 0을 기준으로 split하여 배열에 담아주고 소수 판별하여 반환하면 된다.

JS코드

// 소수인지 구분하는 함수
// num을 2..제곱근 n으로 나누었을 때 나누어지는 수가 있으면 그건 약수가 아님
function isPrime(num) {
    if (num <= 1) return false;
    for (let i = 2; i <= Math.sqrt(num); i++) {
        if (num % i === 0) return false;
    }
    return true;
}

function solution(n, k) {
  // 소수의 수를 저장할 변수  
  let answer = 0;
    // n을 3진수로 변환하고 0을 기준으로 나눠 배열에 담음
    const nToK = n.toString(k).split('0');
    
    nToK.forEach(num => {
        // 1001의 경우 공백이 들어갈 수 있기 때문에 검증처리 해야함
        // 또는 애초에 배열에서 공백을 빼줘도 됨
        if (num !== '' && isPrime(parseInt(num))) {
            answer++;
        }
    });
    
    return answer;
}

개인프로젝트 제출 후 피드백 지적사항

  1. 최초 게임 기록이 없을 경우 최고기록 대신에 에러를 반환


    해당 내용은 없을 경우 0으로 처리하고 있어 console.log 내용으로 인한 오해일 가능성이 있어 문의 해 봐야할 것 같다.

  2. 전체 최고기록 달성 시 GameEnd 패킷 전달 X

마지막에 setUserScore에서 broadCast가 true일경우 바로 반환하여 문제가 되는 것으로 보인다.
사실 게임 엔드 시 패킷처리에 대해서는 기존 사용된 response로 emit하게끔 설정되어 있는 스켈레톤 코드를 그대로 써서
신경을 안썼었지만, 변경을 조금 하면 같은 결과물을 출력할 수 있을 것 같다.

기존 코드 (gameEnd 부분)

수정된 코드 (gameEnd 부분)

기존 코드

수정된 코드

전달 부분을 조금 변경해주면 바로 해결은 되지만, 하드코딩에 가까운 방법인 것 같아 생각을 좀 해봐야 할 것 같다. 오늘 팀프로젝트 시작했으니 생각하면서 개발해봐야겠다.

  1. 스테이지 관계없이 무작위 아이템 생성 / 아이템 생성이 item_unlock 테이블 정의에 따르지 않음

5스테이지까지 진행해보았지만, 문제가 없었다 ㅠㅠ 아마 다른 환경에서 구동 시 문제가 생기거나, 클라이언트 좌측에 보이는 Stage 표기로 인한 오해(실제 스테이지는 0부터 시작인데 클라이언트는 1스테이지부터 시작하는 것으로 표기함) 둘 중에 하나이지 않을까 싶다..

  1. 커밋 메세지 미흡

갈 길이 아주 멀다.. 칭찬만 가득한 피드백이 올 때까지 노력하자...

팀프로젝트 - 타워디펜스 발제

오늘 팀프로젝트가 시작되었다. 타워 디펜스 게임 프로젝트!

필수기능

회원가입 / 로그인 기능 (REST API로 통신)
유저 별 게임 데이터 관리
클라이언트가 서버로부터 수신하는 이벤트 종류 정의 및 코드 구현 (WebSocket으로 통신)
클라이언트가 서버로 송신하는 이벤트 종류 정의 및 코드 구현 (WebSocket으로 통신)
유저 별 최고 기록 스코어 저장

도전기능

여러분들의 창의성을 녹여낼 시간입니다

하하하하하하 어릴때 씽크빅을 좀 할 걸 그랬나...

팀 S.A

크 우리팀 이름 2세계 코더다 ㅋㅋㅋ 2조라서..
오타쿠 친구들을 많이 둔 덕에 접하게 된 이세계물이 떠올라 제안했는데 팀원분들이 흔퀘히 승낙하셨다..

API 명세서

데이터테이블을 클라이언트 측에서 Fetch로 받아올 경우 해당 내용도 추가가 되어야 한다.
우선은 회원가입과 로그인, 정보조회, 탈퇴만 넣었다.

데이터 테이블

패킷구조

오늘 하루종일 고민하다가 결정했다. 기존에 배웠던 방식과 달리 우리팀은 서버권위적으로 가기로 하여 아래와 같이 구조를 구성하였다.

공통 패킷 (Client → Server)

필드명타입설명
accessTokenstring유저 인증 토큰
handlerIdnumber핸들러ID
clientVersionstring클라이언트 버전
payloadjson패킷 데이터

공통 패킷 (Server→ Client)

필드명타입설명
statusstring“success” or “failure”
messagestring메세지
payloadjson패킷 데이터

스테이지 시작 패킷 (Server → Client)

필드명타입설명
stageIdnumber시작할 스테이지 ID

게임 시작 패킷 (Client→ Server)

필드명타입설명
---

스테이지 시작 패킷 (Server → Client)

필드명타입설명
stageIdnumber시작할 스테이지 ID

몬스터 소환 패킷 (Server → Client)

필드명타입설명
monsterInfonumber몬스터 객체 ID

공격 패킷 (Client → Server)

필드명타입설명
monsterIdnumber공격당한 몬스터의 ID
towerIdnumber공격한 타워의 ID

몬스터 정보 수정 패킷 (Server → Client)

필드명타입설명
MonsterInfostring스트링으로 몬스터의 정보를 표현

몬스터 삭제 패킷 (Server → Client)

필드명타입설명
scorenumber몬스터 처치 후 점수

타워 배치 (Client → Server)

필드명타입설명
towerTypeenum배치할 타워 종류
Xnumber설치할 x 위치
Ynumber설치할 y 위치

타워 배치 결과 (Server → Client)

필드명타입설명
towerInfostring스트링으로 타워의 정보를 표현
goldnumber배치 이후 골드

타워 업그레이드 (Client → Server)

필드명타입설명
towerIdnumber업그레이드할 타워의 ID

타워 업그레이드 결과 (Server→ Client)

필드명타입설명
towerInfostring스트링으로 타워의 정보를 표현
goldnumber업그레이드 이후 골드

타워 판매 (Client → Server)

필드명타입설명
towerIdnumber판매할 타워의 ID

타워 판매 결과 (Server→ Client)

필드명타입설명
goldnumber판매 이후 골드

기지 피격 (Client → Server)

필드명타입설명
monsterIdnumber공격한 몬스터 정보

기지 피격 결과 (Server→ Client)

필드명타입설명
healthnumber최종 체력

기대된다. 완벽한 팀프로젝트가 되었으면 좋겠다. 😁

profile
하루 최소 1시간이라도 공부하자..

0개의 댓글