위 문제는 주어진 n을 3진수로 바꾸고 0P0 / P0 / 0P / P 기준 P가 소수인지 판별하는 문제이다.
예시로 437674가 들어왔을경우 3진수로 변환하면 221020101011 이고 0을 /로 바꿨을 때 221/2/1/1/11 이 된다.
저 중 소수의 갯수만 구해주면 되는 문제로 0을 기준으로 split하여 배열에 담아주고 소수 판별하여 반환하면 된다.
// 소수인지 구분하는 함수
// 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;
}
최초 게임 기록이 없을 경우 최고기록 대신에 에러를 반환
해당 내용은 없을 경우 0으로 처리하고 있어 console.log 내용으로 인한 오해일 가능성이 있어 문의 해 봐야할 것 같다.
전체 최고기록 달성 시 GameEnd 패킷 전달 X
마지막에 setUserScore에서 broadCast가 true일경우 바로 반환하여 문제가 되는 것으로 보인다.
사실 게임 엔드 시 패킷처리에 대해서는 기존 사용된 response로 emit하게끔 설정되어 있는 스켈레톤 코드를 그대로 써서
신경을 안썼었지만, 변경을 조금 하면 같은 결과물을 출력할 수 있을 것 같다.
전달 부분을 조금 변경해주면 바로 해결은 되지만, 하드코딩에 가까운 방법인 것 같아 생각을 좀 해봐야 할 것 같다. 오늘 팀프로젝트 시작했으니 생각하면서 개발해봐야겠다.
5스테이지까지 진행해보았지만, 문제가 없었다 ㅠㅠ 아마 다른 환경에서 구동 시 문제가 생기거나, 클라이언트 좌측에 보이는 Stage 표기로 인한 오해(실제 스테이지는 0부터 시작인데 클라이언트는 1스테이지부터 시작하는 것으로 표기함) 둘 중에 하나이지 않을까 싶다..
갈 길이 아주 멀다.. 칭찬만 가득한 피드백이 올 때까지 노력하자...
오늘 팀프로젝트가 시작되었다. 타워 디펜스 게임 프로젝트!
회원가입 / 로그인 기능 (REST API로 통신)
유저 별 게임 데이터 관리
클라이언트가 서버로부터 수신하는 이벤트 종류 정의 및 코드 구현 (WebSocket으로 통신)
클라이언트가 서버로 송신하는 이벤트 종류 정의 및 코드 구현 (WebSocket으로 통신)
유저 별 최고 기록 스코어 저장
여러분들의 창의성을 녹여낼 시간입니다
하하하하하하 어릴때 씽크빅을 좀 할 걸 그랬나...
크 우리팀 이름 2세계 코더다 ㅋㅋㅋ 2조라서..
오타쿠 친구들을 많이 둔 덕에 접하게 된 이세계물이 떠올라 제안했는데 팀원분들이 흔퀘히 승낙하셨다..
데이터테이블을 클라이언트 측에서 Fetch로 받아올 경우 해당 내용도 추가가 되어야 한다.
우선은 회원가입과 로그인, 정보조회, 탈퇴만 넣었다.
오늘 하루종일 고민하다가 결정했다. 기존에 배웠던 방식과 달리 우리팀은 서버권위적으로 가기로 하여 아래와 같이 구조를 구성하였다.
공통 패킷 (Client → Server)
필드명 | 타입 | 설명 |
---|---|---|
accessToken | string | 유저 인증 토큰 |
handlerId | number | 핸들러ID |
clientVersion | string | 클라이언트 버전 |
payload | json | 패킷 데이터 |
공통 패킷 (Server→ Client)
필드명 | 타입 | 설명 |
---|---|---|
status | string | “success” or “failure” |
message | string | 메세지 |
payload | json | 패킷 데이터 |
스테이지 시작 패킷 (Server → Client)
필드명 | 타입 | 설명 |
---|---|---|
stageId | number | 시작할 스테이지 ID |
게임 시작 패킷 (Client→ Server)
필드명 | 타입 | 설명 |
---|---|---|
- | - | - |
스테이지 시작 패킷 (Server → Client)
필드명 | 타입 | 설명 |
---|---|---|
stageId | number | 시작할 스테이지 ID |
몬스터 소환 패킷 (Server → Client)
필드명 | 타입 | 설명 |
---|---|---|
monsterInfo | number | 몬스터 객체 ID |
공격 패킷 (Client → Server)
필드명 | 타입 | 설명 |
---|---|---|
monsterId | number | 공격당한 몬스터의 ID |
towerId | number | 공격한 타워의 ID |
몬스터 정보 수정 패킷 (Server → Client)
필드명 | 타입 | 설명 |
---|---|---|
MonsterInfo | string | 스트링으로 몬스터의 정보를 표현 |
몬스터 삭제 패킷 (Server → Client)
필드명 | 타입 | 설명 |
---|---|---|
score | number | 몬스터 처치 후 점수 |
타워 배치 (Client → Server)
필드명 | 타입 | 설명 |
---|---|---|
towerType | enum | 배치할 타워 종류 |
X | number | 설치할 x 위치 |
Y | number | 설치할 y 위치 |
타워 배치 결과 (Server → Client)
필드명 | 타입 | 설명 |
---|---|---|
towerInfo | string | 스트링으로 타워의 정보를 표현 |
gold | number | 배치 이후 골드 |
타워 업그레이드 (Client → Server)
필드명 | 타입 | 설명 |
---|---|---|
towerId | number | 업그레이드할 타워의 ID |
타워 업그레이드 결과 (Server→ Client)
필드명 | 타입 | 설명 |
---|---|---|
towerInfo | string | 스트링으로 타워의 정보를 표현 |
gold | number | 업그레이드 이후 골드 |
타워 판매 (Client → Server)
필드명 | 타입 | 설명 |
---|---|---|
towerId | number | 판매할 타워의 ID |
타워 판매 결과 (Server→ Client)
필드명 | 타입 | 설명 |
---|---|---|
gold | number | 판매 이후 골드 |
기지 피격 (Client → Server)
필드명 | 타입 | 설명 |
---|---|---|
monsterId | number | 공격한 몬스터 정보 |
기지 피격 결과 (Server→ Client)
필드명 | 타입 | 설명 |
---|---|---|
health | number | 최종 체력 |
기대된다. 완벽한 팀프로젝트가 되었으면 좋겠다. 😁