본문 바로가기
프로그래머스 코딩 테스트

프로그래머스 : JavaScript 알고리즘 100일 챌린지 23일차

by dongjin6539 2023. 6. 7.
728x90
반응형

프로그래머스 : JavaScript 알고리즘 100일 챌린지 23일차

 

코딩테스트 입문 Day23

 

 

1. 특이한 정렬 : 정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.

function solution(numlist, n) {
    var answer = [];
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
numlist n result
[1, 2, 3, 4, 5, 6] 4 [4, 5, 3, 6, 2, 1]
[10000,20,36,47,40,6,10,7000] 30 [36, 40, 20, 47, 10, 6, 7000, 10000]

 

답 확인하기
function solution(numlist, n) {
    return numlist.sort((a,b) => {
        const [aGab, bGab] = [Math.abs(a-n), Math.abs(b-n)]
        // 거리가 같다면 더 큰 수를 우선 배치
        if(aGab === bGab) return b-a
        // 다르다면 거리별 오름차순 정렬
        return aGab-bGab
    })
}

 

2. 등수 매기 : 어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.

function solution(score) {
    var answer = [];
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
score result
[[80, 70], [90, 50], [40, 70], [50, 80]] [1, 2, 4, 3]
[[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]] [4, 4, 6, 2, 2, 1, 7]

 

답 확인하기
function solution(score) {
  	// 1. score의 길이와 동일하고, 모든 요소가 1인 배열을 선언한다.
    let answer = new Array(score.length).fill(1)
    
    // 2. score 배열의 각 평균 점수를 계산한 배열 avg를 선언한다.
    const avg = score.map(score => (score[0]+score[1])/2); 

   // 3. 이중 for문을 사용, i번째 값보다 큰 j값이 있다면 i의 값에 1을 더한다.
    for(let i = 0; i < avg.length; i++){
        for(let j = 0; j <avg.length; j++){
            if(avg[i]<avg[j]) answer[i]++;
        }
    }
    
    return answer;
}

 

3. 옹알이(1) : 머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

function solution(babbling) {
    var answer = 0;
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
babbling result
["aya", "yee", "u", "maa", "wyeoo"] 1
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] 3

 

답 확인하기
function solution(babbling) {
  var answer = 0;
  let can = ["aya", "ye", "woo", "ma"];

  for (let i in babbling) {
    let init = babbling[i];

    for (let j in can) {
      if (babbling[i].includes(can[j])) {
        init = init.replace(can[j], "X");  // 할 수 있는 단어는 X로 치환
      }
    }

    init = init.replace(/X/gi, "");  // X를 모두 공백으로 치환하고 나서
    if (init.length === 0) {  // 공백이 되면 answer에 추가
      answer += 1;
    }
  }
  return answer;
}

// .replace(A, B): 문자열 중에 A를 B로 치환하여 반환한다.
// replaceAll(): 문자열 중에 모든 A를 B로 치환하여 반환한다.
// Javascript에는 replaceAll 함수가 없으므로, replace에 정규식을 넣어 사용한다.

 

4. 로그인 성공? : 쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열 id_pw와 회원들의 정보가 담긴 2차원 배열 db가 주어질 때, 다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록 solution 함수를 완성해주세요.

  • 아이디와 비밀번호가 모두 일치하는 회원정보가 있으면 "login"을 return합니다.
  • 로그인이 실패했을 때 아이디가 일치하는 회원이 없다면 “fail”를, 아이디는 일치하지만 비밀번호가 일치하는 회원이 없다면 “wrong pw”를 return 합니다.
function solution(id_pw, db) {
    var answer = '';
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
id_pw db result
["meosseugi", "1234"] [["rardss", "123"], ["yyoom", "1234"], ["meosseugi", "1234"]] "login"
["programmer01", "15789"] [["programmer02", "111111"], ["programmer00", "134"], ["programmer01", "1145"]] "wrong pw"
["rabbit04", "98761"] [["jaja11", "98761"], ["krong0313", "29440"], ["rabbit00", "111333"]] "fail"

 

답 확인하기
function solution(id_pw, db) {
  let result = '';
  
  //2중 for문을 사용하지 않으려고 map으로 했다 ! 
  //뭔가 조건문을 더 줄일수 있을 것 같은데,, 어떻게 줄일 수 있을지 싱크빅이 안떠오른다.. 힇희...
  db.map((item, i) => {if(id_pw[0] === item[0] && id_pw[1] === item[1]) result = "login"
	else if(id_pw[0] === item[0] && id_pw[1] !== item[1]) result =  "wrong pw"
	else if(id_pw[0] !== item[0] && id_pw[1] !== item[1]) result = "fail"})
	
  return result
}

 

728x90
반응형