Algorithm Study 2022-06-25

저요·2022년 6월 25일

알고리즘 스터디

목록 보기
3/3

2022-06-25 알고리즘 스터디 2회차

문제 1 - 완주하지 못한 선수

validarity : 100%
language : javascript
link : 코딩 테스트 고득점 kit > 해시 > 완주하지 못한 선수

문제 키워드

  1. Hash Map
  2. forEach를 이용한 데이터 비교

나의 답

function solution(participant, completion) {
    var answer = '';
    var checkMap = new Map();
    
    participant.forEach(data=>{
        if(checkMap.get(data)!=null){
            checkMap.set(data, checkMap.get(data)+1);    
        }else{
            checkMap.set(data, 1);
        }
    });
    
    completion.forEach(data=>{
       checkMap.set(data, checkMap.get(data)-1);
    });
    
    participant.forEach(data=>{
        if(checkMap.get(data) >= 1){
            answer = data;
        }
    });
    
    console.log(checkMap);
    
    return answer;
}

문제 2 - K번째 수

validarity : 100%100%
language : javascript
link : 코딩 테스트 고득점 kit > 배열 > K번째 수

나의 답

function solution(array, commands) {
    var answer = [];
    var tempArr = [];
    var begin = 0; 
    var end = 0;
    var index = 0;
    
    for(let i = 0; i<commands.length; i++){
        begin = commands[i][0] - 1;
        end = commands[i][1];
        index = commands[i][2] - 1;
        
        tempArr = array.slice(begin,end);
        
        tempArr.sort(function(a,b){         //sort는 문자열 정렬을 가정 숫자열은 제대로 정렬 안 될 수 있음
            return a-b;                     //따라서 이렇게 작성해주어야 한다. 
        });
        
        //sort.((a,b) => a-b)
        
        answer[i] = tempArr[index];
    }
   
    return answer;
}

피드백

1. sort 정렬

문제 3 - 체육복

validarity : 100%
language : javascript
link : 코딩 테스트 고득점 kit > 탐욕법 > 체육복

나의 답

function solution(n, lost, reserve) {
    var answer = 0;
    var student = new Map();
    var lostData = 0;
    var front_s = 0;
    var back_s = 0;
    
    lost.sort(function(a,b){
        return a-b;
    });
    reserve.sort(function(a,b){
        return a-b;
    });
    
    //n 학생 숫자
    //lost 잃어버린 학생
    //reverse 여분이 있는 학생 
    
    for(let i =0; i < n; i++){
        student.set(i+1, 1);
    }
    
    reserve.forEach(data=>{
       student.set(data,student.get(data)+1);
    });
    
    lost.forEach(data=>{
       student.set(data, student.get(data)-1);
    });
    
    for(let i =0; i < lost.length; i++){
        lostData = lost[i];
        front_s = lostData-1;
        back_s = lostData+1;
        
        //1. 없는 사람만 빌리도록 체크 
        if(student.get(lostData) == 0){
            //2. 2개 이상인 앞사람에게서만 빌리도록 체크 
            if(student.get(front_s) >= 2){
                student.set(lostData, student.get(lostData)+1);
                student.set(front_s, student.get(front_s)-1);
            //3. 2개 이상인 뒷사람에게서만 빌리도록 체크 
             }else if(student.get(back_s) >= 2){
                student.set(lostData, student.get(lostData)+1);
                student.set(back_s, student.get(back_s)-1);
            }
        }   
    }
    
    //1개 이상 가지고 있는 사람만 체크
    student.forEach(data=>{
        if(data >= 1) answer++;
    });
    
    console.log(student);

    
    return answer;
}

느낀점

hashMap을 공부한 뒤에 작성한 코드 이전보다 훨씬 깔끔해지고 문제 풀기도 편해졌다.

profile
웹개발

0개의 댓글