[프로그래머스]Algorithm_23.04.12

윤성해·2023년 4월 12일
0

알고리즘

목록 보기
16/22
post-thumbnail

문제

내 풀이

두 배열을 이중반복문으로 돌려서 같은거빼고 중복되지 않는것만 새로운 배열에 담아주고 리턴하기. 라고 생각했지만 잘 안되어서 마무리를 못한 내 코드..

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값 가져올 수 있다. 
profile
Slow and steady wins the race.

1개의 댓글

comment-user-thumbnail
2023년 4월 12일

아빠도 어려워~ ㅋ~

답글 달기