프론트엔드✏️/코드캠프

알고리즘 - 객체, 맵(map)

당근먹는하니 2022. 6. 13. 20:20
728x90
반응형
function solution(participant, completion) {
    var answer = '';
  console.log(participant.filter((el)=> !completion.includes(el)))
  
 
    return String(participant.filter((el)=> !completion.includes(el)));
}

solution(["leo", "kiki", "eden"], ["eden", "kiki"]);

쉽다~했는데 아니였음

동명이인 ,,,

 

// 시간 초과 풀이(for, indexOf, splice) 
function solution(participant, completion) {

  for(let i = 0; i < completion.length; ++i) {
    participant.splice(
    participant.indexOf(completion[i]), 1)
    
    // splice
    // 1. 원하는 구간 삭제, 원하는 구간 데이터 추가
  }
  return participant[0];
}
// 배열 직접 수정하지 않고 데이터를 따로 추려냄
// key와 value 찾아서 정보 조회하는 것 : 해쉬

function solution(participant, completion) {

	const answer = {};
  // 1. 참가한 선수의 이름과 수를 정리 
  for(let i = 0; i < participant.length; i++) {
    answer[participant[i]] === undefined 
      ? answer [participant[i]] = 1
    	: answer[participant[i]]++; 
  console.log(answer);
  }
  
  // 2. 참가자 명단에서 완주한 사람의 이름을 제거
  for(let i = 0; i < completion.length; i++) {
    answer[completion[i]]--;
  }
  
  // 3. 완주하지 못한 선수 찾기
  for(let key in answer) {
    if(answer[key] !== 0) {
      return key;
    }
  }
}

 

// 메서드 사용
function solution(participant, completion) {
	participant.sort();
  console.log(participant);
  completion.sort();
  
  // 문자열 기본 오름차순 정렬 
  return participant.filter( (name, i) => {
    // console.log(name, completion[i]);
    return name !== completion[i];
    // 같은 줄에 있는 사람의 이름이 같지 않을 때 
  })[0]
  // 가장 먼저 찾은 사람의 이름 return - 왜지?
}

solution(["mislav", "stanko", "mislav", "ana"], ["stanko", "ana", "mislav"] )

// 속도는 해시가 더 빨라요! (키와 밸류로 저장하고 있기 때문)

 

 


// Map
// 1. 객체와 비슷한 역할을 하는 자료 구조
// 2. 키와 밸류로 데이터를 고나리한다.

map = new Map();
map.set("name", "만두");

map.get("name"); // '만두'

map.forEach((value, key)=> {
  console.log(value,key); // '만두', 'name'
})

// map.delete("name"); // 데이터 삭제

// map.clear(); // 데이터 치고화

const mapping = map.entries();
// mapping // {next: f next()}
mapping.next().value; // ['name','만두']
// 또 쓰면 다음꺼 가져옴

// 1. 객체의 크기를 바로 가져올 수 있다.
map.size // 1 


// 2. key값에 어떠한 데이터 타입도 들어올 수 있다. 
obj = {};
obj[1] = "문자열";
obj //  { '1': '문자열'}

map.set(1, "숫자 타입");
map // 1 => '숫자 타입'

// 배열도 넣을 수 있다. 

// 3. 객체의 순서를 보장받을 수 있다. 

obj = {};
obj["1"] = 1;
obj["3"] = 3;
obj["2"] = 2;
obj // { '1': 1, '2': 2, '3': 3 } 키값 자동 정렬

// 맵은 자동 정렬 안 하고 넣어준 순서대로 저장된다.

배열의 주소를 참조해서 찾아옴. 

 

 

728x90
반응형