JS 알고리즘 6주차

박규원·2023년 5월 18일
0

JS 알고리즘

목록 보기
5/11

진료 순서 정하기

💡 외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 `emergency`가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
function solution(emergency) {
    var answer = [];
    var Rcopy=[];
    for(var a=0;a<emergency.length;a++){
        Rcopy[a]=emergency[a];
    }
    
    emergency.sort((a,b)=>b-a);
    
    for(var i=0;i<Rcopy.length;i++){
        for(var j=0;j<emergency.length;j++){
            if(Rcopy[i]==emergency[j]){
                answer[i]=j+1;
                break;
            }
        }
    }
    
    return answer;
}

영어가 싫어요

💡 영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 `numbers`가 매개변수로 주어질 때, `numbers`를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
function solution(numbers) {
    var answer = '';
    var a=[];
    var str=[];
    
    var alpha=["zero","one","two","three","four","five","six","seven","eight","nine"];
    while(numbers!=''){
        for(var j=0;j<10;j++){
            if(numbers.substring(0,3)==alpha[j]){
                answer=answer.concat(j);
                numbers=numbers.replace(alpha[j],'');
                continue;
            }
            else if(numbers.substring(0,4)==alpha[j]){
                answer=answer.concat(j);
                numbers=numbers.replace(alpha[j],'');
                continue;
            }
            else if(numbers.substring(0,5)==alpha[j]){
                answer=answer.concat(j);
                numbers=numbers.replace(alpha[j],'');
                continue;
            }
        }
    }
    
    return Number(answer);
}

외계어 사전

💡 PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 `spell`과 외계어 사전 `dic`이 매개변수로 주어집니다. `spell`에 담긴 알파벳을 한번씩만 모두 사용한 단어가 `dic`에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.
function solution(spell, dic) {
    var answer = 0;
    var count=0;
    for(var i=0;i<dic.length;i++){
        for(var j=0;j<spell.length;j++){
            if(dic[i].indexOf(spell[j])>=0)count++;
            else break;
        }
        if(count==spell.length){
            return 1;
        }
        count=0;
    }
    
    answer=2;
    
    return answer;
}

문자열 밀기

💡 문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 `A`와 `B`가 매개변수로 주어질 때, `A`를 밀어서 `B`가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 `B`가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
#내가 작성한 코드 : 왜 자꾸 한 사례가 틀리는지는 모르겟지만 나중에 해결하도록 하겠다.
function solution(A, B) {
    var answer = 0;
    var copy;
    var Rcount=0,Lcount=0;
    var Acpy=A;
    var rAck=0, lAck=0;
    
    if(A===B) return 0;
    
    A=A.split('');
    Acpy=Acpy.split('');
    
    for(var i=0;i<A.length-1;i++){
        
        copy= A[0];
        A.shift();
        A=A.concat(copy);
        Rcount++;
        if(A.join('')===B){ rAck=1; break;}
    }
    
     for(var i=0;i<Acpy.length-1;i++){
        copy= Acpy[Acpy.length-1];
        Acpy.unshift(copy);
        Acpy.pop(copy);
        Lcount++;
        if(Acpy.join('')===B) {lAck=1; break;}
    }
    
    if(Rcount>=Lcount && (rAck===1 || lAck===1))answer=Lcount;
    else if(Rcount<=Lcount && (rAck===1 || lAck===1))answer=Rcount;
    else if(rAck===0 && lAck===0) answer=-1;
    
    return answer;
}

#정답코드
function solution(A, B) {
  if (A.length !== B.length) {
    return -1;
  }

  let count = 0;
  while (A !== B) {
    A = A.slice(-1) + A.slice(0, -1); // 문자열을 오른쪽으로 한 칸씩 밀기
    count++;

    if (count > A.length) {
      // 모든 경우를 다 확인했는데도 B를 만들 수 없는 경우
      return -1;
    }
  }

  return count;
}

컨트롤 제트

💡 숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 `s`가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.
function solution(s) {
    var answer = 0;
    
    s=s.split(' ');
    
    for(var i=0;i<s.length;i++){
        if(s[i] =='Z'){
            answer-=parseInt(s[i-1]);
        }
        else{
            answer+=parseInt(s[i]);
        }
        
    }
    
    return answer;
}
profile
Just do IT

0개의 댓글