[알고리즘]프로그래머스 0단계 뽀개기(Day7-8)

HIHI JIN·2023년 1월 9일
2

알고리즘

목록 보기
3/29
post-thumbnail

Day 7

특정문자 제거하기

문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

//내 코드
function solution(my_string, letter) {
    var answer = '';
    for(let i of my_string){
        if(i !== letter){
            answer+=i;
        }
    }
    return answer;
}
//특정문자 letter을 제거한 string리턴
//for문으로 mystring 요소 나열
//if 요소와 letter이 일치하지않는다면 새로운 문자열에 붙이기

//다른 사람 코드
function solution(my_string, letter) {
    return my_string.replaceAll(letter, "");
}//replaceAll메서드는 첫번째 인자를 두번째인자로 치환하여 반환한다.

//또 다른 사람 코드
function solution(my_string, letter) {
    const answer = my_string.split(letter).join('')
    return answer;
}//split메서드로 letter을 기준으로 떨어뜨려 배열을 만든뒤
//join메서드로 ""을 떼고 모두 붙인 문자열로 바꿔 반환한다.

각도기

각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.

//내 코드
function solution(angle) {
    if(0 < angle && angle < 90){
        return 1;
    }
    else if(angle === 90){
        return 2;
    }
    else if(90 < angle && angle < 180){
        return 3;
    }
    else if(angle === 180){
        return 4;
    }
}//if문으로 특정 각의 조건을 두고 return 숫자

양꼬치

머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

//내 코드
function solution(n, k) {
    let meet = 12000*n;
    let soda = 2000*k;
    soda = soda - Math.trunc(n/10)*2000;
    return meet+soda;
}
//양꼬치 n 10인분 먹으면 음료수 k 서비스
//12000원 2000원 총지불금액 리턴
//12000*n = meet, 2000*k = soda
//총 금액은 원래는 12000*n+2000*k
//soda = soda - Math.trunc(n/10)*2000
//양꼬치 n인분에 10을 나눈게 음료수 서비스로 준 개수

//다른 사람 코드
function solution(n, k) {
    k-=~~(n/10);
    if (k < 0) k = 0;
    return n*12000+k*2000;
}//~~틸드 라는 메서드 : Math.floor()와 동등하게 쓰이는 연산자
//10인분이상 먹었다면 10으로 나눠 서비스음료수 개수만큼 먹은 음료수를 뺀다.
//서비스음료수를 딱맞게 먹었다면 k=0일테고, 서비스음료보다 음료를 더 먹었다면 계산하면 된다.

짝수의 합

정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

//내 코드
function solution(n) {
    let result = 0;
    let i = 0;
    while(i<=n){
        if(i%2 === 0){
            result+=i;
        }
        i+=1;
    }
    return result;
}
//n이하의 짝수 다 구하고 더하기
//반복문으로 1부터 n까지 반복해서 나온 i들을 result에 다 더해주기

Day 8

배열 자르기

정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.

//내 코드
function solution(numbers, num1, num2) {
    const answer = numbers.slice(num1, num2+1);
    return answer;
}
//배열 numbers에서 인덱스num1부터 인덱스 num2까지 자른 배열리턴
//slice를 써서 복사하기 slice(num1, num2+1)

//다른 사람 코드

외계행성의 나이

우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.

//내 코드
function solution(age) {
    let ageStr = String(age);
    let ageArr = ageStr.split("");
    let letter = [];
    for(let i=97; i<=122; i++){
    letter.push(String.fromCharCode(i));
    }
    for(let j=0; j<=ageStr.length; j++){
        ageArr[j] = letter[Number(ageArr[j])];
    }
    return ageArr.join("");
}
//age의 인덱스가 알파벳 순서로 되어 있다. 알파벳을 리턴
//age를 문자열로 치환
//age를 split("")으로 배열로 만들고 ageArr = ["2","3"];
//변수 letter의 배열로 알파벳 순서 배열을 만든다.
//아스키코드를 문자로 변환 ->  String.fromCharCode()쓰면 알파벳을 배열에 담을 수 있다.
//만약 age가 2라면 age의 첫글자는 letter[2]=c 여야 한다.
//for문으로 i의 순서 0,1,2를 만들고
//ageArr[i]는 letter[Number(ageArr[i])]로 바꾼다.
//마지막에 join("")메서드로 붙인 문자열로 리턴

//다른 사람 코드
function solution(age) {
  return age
    .toString()
    .split("")
    .map((v) => "abcdefghij"[v])
    .join("");
}//메서드를 순서대로 사용한 코드이다.
//먼저 문자열로 치환, 배열로 치환,
//그 배열의 요소를 v로 만들고 알파벳을 v인덱스로 꺼내고 다시 배열을 문자열로 치환함

진료순서 정하기

외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.

//내 코드
function solution(emergency) {
    let sorted = emergency.slice().sort((a,b)=>b-a);
    return emergency.map(v=>sorted.indexOf(v)+1);
}//sorted는 emergency를 복사해서 오름차순으로 정리한 배열이다.
//emergency의 요소 하나씩을 sorted의 요소에서 몇번째 index인지 찾고 몇등인지 반환해준디.
//index세는 건 0부터지만 등수는 1부터 시작하므로 +1을 하였다.

//다른 사람 코드
function solution(emergency) {
    const temp = [...emergency].sort((a,b)=>b-a)
    return emergency.map(v=>temp.indexOf(v)+1)
}//sort()가 원 배열을 정렬하기 때문에 emergency 배열 자체가 바뀌므로
//[...]을 사용하여 원 배열을 복사한 다음 정렬해 주었다.

순서쌍의 개수

순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

//내 코드
function solution(n) {
    let arr = [];
    let newArr = [];
    for(let e=1; e<=n; e++){
        if(n%e === 0){
            arr.push(e);
        }
    }
    for(let i of arr){
        for(let j of arr){
            if(i*j === n){
                newArr.push((i,j));
            }
        }
    }
    return newArr.length;
}
//num1*num2가 20이 되는 순서쌍의 개수 구하기
//e=1, e<=n; n을 반복문 e로 나눴을 때 나머지가 0이라면 배열 arr.push(e)
//배열 arr의 요소i를 나열
//배열 arr의 요소j를 나열
//i*j가 n이면 newArr.push((i,j))
//return newArr.length

//다른 사람 코드
function solution(n) {
    const answer = []
    for (let i = 0; i < n + 1; i++) {
        if (n % i === 0) {
            answer.push(i)
        }
    }
    return answer.length
}//그냥 순서쌍을 구하지 않고 약수만 구해도 구해도 순서쌍의 개수를 알 수 있는 문제였다.
//이 코드는 약수만 구하여 약수의 개수를 구했다.
profile
신입 프론트엔드 웹 개발자입니다.

1개의 댓글

comment-user-thumbnail
2023년 1월 9일

항상 어떤 목표를 달성하고자 할 때 꾸준함이라는 덕목이 가장 중요하다고 생각하는데 매일 적지 않은 양의 자료를 정리하여 올리시는 hihijin님을 보니 정말 대단하시다는 생각이 드네요!ㅎㅎ

답글 달기