두 배열을 이중반복문으로 돌려서 같은거빼고 중복되지 않는것만 새로운 배열에 담아주고 리턴하기. 라고 생각했지만 잘 안되어서 마무리를 못한 내 코드..
function solution(participant, completion) { const answer = ''; for (let i=0; i < participant.length; i++){ for (let j=0; j < i.length; j++){ if (participant[i] !== i[j]) console.log(participant[i]) // return answer.push(participant[i] ) } } }
function solution(participant, completion) { const answer = ''; participant.sort(); completion.sort(); for (let i=0; i < participant.length; i++){ if(participant[i] !== completion[i]){ answer.push (participant[i]) break; } } return answer; }
두번째 코드는 구글링해서 참고한건데 이것도 일단은 틀렸음
1.
시간초과 문제로(효율성) 실패. 반복문이 3번 돈다
function solution(participant, completion) {
for (let i=0; i < completion.length; i++){
participant.splice(
participant.indexOf(completion[i]), // 어디서부터 제거하거나 추가할건지
1 //몇개의 데이터를 삭제할건지
)
}
return participant[0]
}
// splice는 배열이 자동생성되어서 원본이 새로 저장된다. 제거된값이 담긴다.
2.오름차순으로 정렬
0번째부터 마지막 인덱스까지 비교해보자
function solution(participant, completion) {
participant.sort(); // 참가자 명단을 오름차순으로 정렬한다.
completion.sort(); // 문자열만 있을때는 sort만 써도 오름차순이 잘 작동된다.
for (let i =0; i<participant.length; i++){
if(participant[i] !== completion[i]){
//정렬된 참가자와 완주자 명단을 서로 비교했을 때
// 동일하지 않는 참가자의 이름을 찾는다.
return participant[i]
}
}
}
3.메서드 사용
이름이 같지않은 사람만 남기고 새로운배열에 담는다. -> filter()
function solution(participant, completion) {
participant.sort(); // 참가자 명단을 오름차순으로 정렬한다.
completion.sort(); // 문자열만 있을때는 sort만 써도 오름차순이 잘 작동된다.
return participant.filter((name,i) => {
return name !== completion[i];
})[0]
}
//filter는 배열로 리턴된다.
4. 해시로 풀이
function solution(participant, completion) {
const obj = {};
// 1. 참가자 명단에서 이름과 참가자의 수를 정리
for (let i = 0; i < participant.length; i++){
if (obj [participant[i]]=== undefined){
obj [participant[i]]=0;
}
obj [participant[i]]++;
}
// 2. 참가자 명단에서 완주자 이름 수 만큼 제거
for ( let i = 0; i<completion.length; i++){
obj[completion[i]] --;
}
// 3. 참가자 명단에서 완주하지 못한 선수를 찾는다. -> for in
for (let name in obj){
if (obj[name] > 0 ){
return name;
}
}
}
💡 객체 구조문법
1. new Map()객체처럼 사용하기 위해 만들어진 애
1번째 인자는 키, 2번째는 벨류.
map에서는 map.get("name")해야 위에서 철수를 가져온다.
또, 아래처럼 맵을 사용하면 넣는 순서대로 리턴이 된다. 순서를 보장받을 수 있음
객체를 넣었는데 문자열로 바뀌고, 배열도 문자열로 출력이 되는것을 볼 수 있다. 함수도 ..모든게 문자로 바뀐다.
map으로 한다면?
맵사용을 하면 해당 데이터의 타입을 그대로 넣어주게 되는 것!map.size // 이객체가 얼마만큼의 데이터를 가지고있는지 바로 알 수 있다. map.forEach (el=>{ }) // vlaue값 가져올 수 있다.
아빠도 어려워~ ㅋ~