[코테스] 2번째 문제

dede.WUI·2021년 9월 14일
0

Ct study

목록 보기
1/1
post-thumbnail

코테스

[Lv.1 - 2]

문제 풀이


로또의 최고 순위와 최저 순위

function solution(lottos, win_nums) {
    var answer = [];
    // 제일 많이 맞춘 경우를 담을 변수 생성
    let highest = 0;
    // 제일 많이 맞추지 못할 경우를 담을 변수 생성
    let lowest = 0;
    
    // 당첨 번호가 lottos에 들어가 있을 경우 h,l 둘다 1씩 키운다.
    lottos.forEach((num) => {
        if (win_nums.includes(num)){
            highest += 1;
            lowest += 1;
            return
        }
        // 알아볼 수 없는 번호가 나올 경우 h만 1씩 키워준다.
        if (num === 0){
            return highest += 1;
        }
    })

    // 순위 구하기.
    // 일치하는 번호가 2개 밑일 경우 6등 / 그 외는 7에서 맞춘 수만큼 빼서 순위를 구한다.
    highest = highest < 2 ? 6 : 7 - highest
    lowest = lowest < 2 ? 6 : 7 - lowest
    
    // 구한 순위를 배열에 넣어준다.
    answer = [highest,lowest]
    return answer;
}

폰켓몬

function solution(nums) {
    // 가질 수 있는 폰켓몬의 최대값을 담은 변수를 생성합니다.
    let ponketmonCount = nums.length / 2
    // 가질 폰켓몬을 담은 배열을 생성합니다.
    const myPonketmon = []
    
    nums.forEach((ponketmon) => {
    // 가지고 있는 폰켓몬일 경우 넘김.
        if(!myPonketmon.includes(ponketmon)){
            // 가질 수 있는 폰켓몬의 수를 넘길 경우 현재 가진 폰켓몬의 수를 반환합니다.
            if (ponketmonCount === 0){return myPonketmon.length}
            // 가지고 있지 않은 폰켓몬일 경우 가짐.
            myPonketmon.push(ponketmon)
            // 폰켓몬을 챙긴 뒤 카운트를 줄인다.
            ponketmonCount -= 1
        }
    })
    // 가질 수 있는 폰켓몬 수보다 중복된 개체가 많을 경우에는 배열을 다 돈 후 현재 가진
    // 폰켓몬의 수를 반환합니다.
    return myPonketmon.length
}

오픈 채팅방

function solution(record) {
    // id와 닉네임을 담고 있는 객체 생성
   const idCon = {};
    // 상태(state)에 따른 메세지와 id를 담은 배열
    const arr = [];
    
    // 배열 고차 함수를 이용해서 한 문장씩 
    record.forEach((cur) => {
    // 공백을 기준으로 배열을 나누어 변수에 담아준다.
    // state, id, name에 각각 담긴다.
        const [state, id, name] = cur.split(' ');
        // Enter, Leave의 상태일 때만 메세지를 출력함.
        if (state !== 'Change') {
            arr.push({
                id,
                text: state === 'Enter' ? '님이 들어왔습니다.' : '님이 나갔습니다.'
            });
        }
        // Leave의 경우 이름을 표시하지 않음.
        // 새로 들어오는 경우와 채팅방 내에서 이름 수정이 있을 경우 id에 맞춰서
        // 닉네임을 갱신시켜준다.
        if (name) {
           idCon[id] = name;
        }
    });
    // 배열에 담긴 메세지를 map을 이용해서 변경 후 출력해 줍니다.
    return arr.map((item) => `${idCon[item.id]}${item.text}`)
}

스터디 내용

for → forEach → map

  • for 멈추고 싶을때, break, continue 사용이 가능
  • forEach 순회 → 배열을 반환하지 않기 때문에 메소드 체이닝을 하기 위해서는 새로운 배열을 생성해야한다.
  • map 배열 반환

배열 중복 제거

1. Set()과 전개연산자

  • Set()
    JS 표준 내장 객체
    Set 객체는 자료형에 관계 없이 원시 값과 객체 참조 모두 유일한 값을 저장할 수 있다.

-Set 메소드 .has(value) - boolean 반환

// 교집합은 다음으로 흉내(simulate)낼 수 있음
var intersection = new Set([...set1].filter(x => set2.has(x)));

// 차집합은 다음으로 흉내낼 수 있음
var difference = new Set([...set1].filter(x => !set2.has(x)));

2. array.reduce()

참고

example.reduce(function(acc, current) {
  if (acc.findIndex(({ id }) => id === current.id) === -1) {
    acc.push(current);
  }
  return acc;
}, []);

initialValue를 제공하지 않으면, reduce()는 인덱스 1부터 시작해 콜백 함수를 실행하고 첫 번째 인덱스는 건너 뜁니다. initialValue를 제공하면 인덱스 0에서 시작합니다.

판별함수

const isLargeNumber = (element) => element > 13;
console.log(isLargeNumber(14)) //true

(({ id }) => id === current.id) === -1) 이 부분은 이해가 잘 안간다.
csb

3.filter()

const k = nums.filter((a,i) => nums.indexOf(a) === i)

JS의 자료형

  • 값 자료형 1 === 1
  • 레퍼런스(주소) 자료형 [1,2] ! == [1,2]

목표

profile
🌱 growing...

0개의 댓글