오늘의 삽질

아이템 시뮬레이터 과제

  • 오늘은 팀이 새롭게 편성되어 아이스브레이킹 시간을 지니며 팀 노션을 작성하였다.

  • 추가로 조장님이 Github의 Pull request를 응용하여 코드리뷰 하는 방법을 설명해 주셨다!

    => branch를 분리한 후, 회의시간에 Pull request를 통해 dev branch에 병합 시,
    변경사항을 한눈에 보기 쉽고 comments를 각자 달 수 있기에 원활하게 코드리뷰를 진행할 수 있다!

개선점 분석

  • 저녁 식사 이후 회의가 끝나면, 과제 진행보단 자료정리를 하며 계획을 세우는 방향으로 진행해야겠다.

지식창고

Client-Server Model

기본 발표 자료

C/S-Model.pptx

추가 보충사항

  1. 클라이언트와 서버의 가변성

    • 클라이언트와 서버라는 역할은 정보적 측면에서 언제나 바뀔 수 있는 역할이다.

    네이버 페이에 결제를 신청하면, 내가 신청하는 앱은 클라이언트 / 신청을 받는 네이버 페이는 서버 이다.
    그러나 네이버 페이가 이 정보를 가지고 결제 관련 은행에 서비스를 신청하면,
    네이버 페이 = 클라이언트 / 은행 = 서버 의 새로운 역할이 만들어진다!

  2. 게임서버의 주요 역할

    • 게임 및 플레이어의 상태 관리와 동기화

    • 게임 내 로직 처리

    • 게임 데이터, 유저 데이터의 저장과 보안관리

알고리즘 코드 카타

모의고사

  • 문제
    1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때,
    가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

  • 조건

    • 시험은 최대 10,000 문제로 구성되어있습니다.

    • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.

    • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

function solution(answers) {
    let answer = [];
    let tester = [0, 0, 0];
    let best = 0;
    
    for (let i = 0;i < answers.length;i++) {
        if (answers[i] === (i) % 5 + 1) tester[0]++
        
        if (i % 2 === 0 && answers[i] === 2) tester[1]++
        else if (answers[i] === i % 8 && i % 8 <= 3) tester[1]++
        else if (answers[i] === 4 && i % 8 === 5 ) tester[1]++
        else if (answers[i] === 5 && i % 8 === 7 ) tester[1]++
        
        if (answers[i] === 3 && i % 10 < 2) tester[2]++
        else if (answers[i] === 1 && i % 10 < 4 && i % 10 >= 2) tester[2]++
        else if (answers[i] === 2 && i % 10 < 6 && i % 10 >= 4) tester[2]++
        else if (answers[i] === 4 && i % 10 < 8 && i % 10 >= 6) tester[2]++
        else if (answers[i] === 5 && i % 10 < 10 && i % 10 >= 8) tester[2]++
    }    
    best = Math.max(...tester)
    
    tester.forEach((val,idx) => {
        if (best === val) answer.push(idx+1)
    })
    
    return answer;
}
  • 다른 코드 분석
function solution(answers) {
    var answer = [];
    var a1 = [1, 2, 3, 4, 5];
    var a2 = [2, 1, 2, 3, 2, 4, 2, 5]
    var a3 = [ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5];

    var a1c = answers.filter((a,i)=> a === a1[i%a1.length]).length;
    var a2c = answers.filter((a,i)=> a === a2[i%a2.length]).length;
    var a3c = answers.filter((a,i)=> a === a3[i%a3.length]).length;
    var max = Math.max(a1c,a2c,a3c);

    if (a1c === max) {answer.push(1)};
    if (a2c === max) {answer.push(2)};
    if (a3c === max) {answer.push(3)};

    return answer;
}

코드 분석
3~5 : 수포자의 패턴을 배열화
7~9 : [i % a1.length]는 패턴의 수만큼 나눠서 비교하기 위함, 및 뒤에 .length로 정답의 갯수를 셈(filter 메서드는 조건이 일치시에만 배열이 추가됨)
10~14 : 제일 많이 푼 인원을 비교하여 오름차순으로 결과에 추가

Reference

programmers
스파르타코딩클럽