문자열 밀기

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 AB가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

function solution(A, B) {
    let answer = 0;
    let aArr = A.split('');

    for(let i = 0; i < A.length; i++) {
        if(aArr.toString().replaceAll(',', '') === B) break;

        aArr.unshift(aArr[A.length - 1]);
        aArr.pop();
        answer += 1;

        if(answer === A.length) answer = -1;
    }

    return answer;
}

종이 자르기

머쓱이는 큰 종이를 1 x 1 크기로 자르려고 합니다. 예를 들어 2 x 2 크기의 종이를 1 x 1 크기로 자르려면 최소 가위질 세 번이 필요합니다.

정수 M, N이 매개변수로 주어질 때, M x N 크기의 종이를 최소로 가위질 해야하는 횟수를 return 하도록 solution 함수를 완성해보세요.

function solution(M, N) {
    var answer = 0;
    return (M - 1) + ((N - 1) * M);
}

연속된 수의 합

연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 numtotal이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.

function solution(num, total) {
    let div = Math.floor(total / num);
    let sum = 0;

    while(true) {
        for(let i = 0; i < num; i++) {
            sum += div + i;
        }

        if(sum === total) {
            break;
        } else if(sum < total) {
            div += 1;
            sum = 0;
        } else if(sum > total) {
            div -= 1;
            sum = 0;
        }
    }

    let answer = [];

    for(let i = 0; i < num; i++) {
        answer.push(div + i);
    }

    return answer;
}

다음에 올 숫자

등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.

function solution(common) {
    /*
     * 등차수열 혹은 등비수열이 아닌 경우가 없고,
     * 등비수열인 경우 공비는 0이 아닌 정수
     */
    return common[1] - common[0] === common[2] - common[1] ? common[common.length - 1] + (common[1] - common[0]) : common[common.length - 1] * (common[1] / common[0]);
}

중간중간 일정 때문에 못푸는 날이 있었는데, 아무튼 프로그래머스 입문캘린더 종료.

'코딩테스트' 카테고리의 다른 글

뇌주름 살리기 - 21  (0) 2025.02.08
뇌주름 살리기 - 20  (0) 2025.02.06
뇌주름 살리기 - 19  (0) 2025.02.04
뇌주름 살리기 - 18  (0) 2025.02.02
뇌주름 살리기 - 17  (0) 2025.01.31

치킨 쿠폰

프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.

function solution(chicken) {
    let answer = 0;

    const coupon = function(x) {
        if(x < 10) return 0;
        console.log(x);
        return Math.floor(x / 10) + coupon(Math.floor(x / 10) + (x % 10));
    }

    return coupon(chicken);
}

이진수 더하기

이진수를 의미하는 두 개의 문자열 bin1bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.

function solution(bin1, bin2) {
    let answer = '';
    let bin = Number('0b' + bin1) + Number('0b' + bin2);

      //2진수 변환
    while(bin > 0) {
        answer += (bin % 2).toString();
        bin = Math.floor(bin / 2);
    }

    let binStr = answer.split('').reverse().toString().replaceAll(',', '');
      //0은 0으로 만들기
    if(binStr === '') binStr = '0';

    return binStr[0] === 0 && binStr.length > 1 ? binStr.splice(1, -1) : binStr;
}

A로 B 만들기

문자열 beforeafter가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.

function solution(before, after) {
    return before.split('').sort().toString() === after.split('').sort().toString() ? 1 : 0;
}

k의 개수

1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.

function solution(i, j, k) {
    let answer = 0;

    for(let n = i; n <= j; n++) {
        answer += n.toString().split('').filter((x) => x === k.toString()).length;
    }

    return answer;
}

'코딩테스트' 카테고리의 다른 글

뇌주름 살리기 - 22 (입문캘린더 종료)  (0) 2025.02.16
뇌주름 살리기 - 20  (0) 2025.02.06
뇌주름 살리기 - 19  (0) 2025.02.04
뇌주름 살리기 - 18  (0) 2025.02.02
뇌주름 살리기 - 17  (0) 2025.01.31

등수 매기기

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

function solution(score) {
    //기존 인덱스와 평균을 가진 배열로 바꾸고 평균을 기준으로 정렬
    let scoreSort = score.map(function (x, idx) {
        return [idx, (x[0] + x[1]) / 2]
    }).sort((x, y) => y[1] - x[1]);

    let answer = new Array(score.length);
    let rank = 1;
    let rankDup = 0;

    for(let i = 0; i < scoreSort.length - 1; i++) {
        answer[scoreSort[i][0]] = rank;

        //중복되면 중복카운트만 올리고, 
        //다음 숫자가 달라지면 중복카운트도 같이 더하기
        if(scoreSort[i][1] === scoreSort[i + 1][1]) {
            rankDup += 1;
        } else {
            rank += 1 + rankDup;
            rankDup = 0;
        }
    }

    answer[scoreSort[scoreSort.length - 1][0]] = rank;

    return answer;
}

옹알이 (1)

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

function solution(babbling) {
    //네 가지 발음을 공백으로 치환하고,
    //남아있는게 없다면 발음할 수 있는 단어
    return babbling.map((x) => x.replaceAll(/(aya)|(ye)|(woo)|(ma)/g, '')).filter((x) => x === '').length;
}

로그인 성공?

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

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

    //객체로 만들기
    for(let i of db) {
        answer[i[0]] = i[1];
    }

    return answer[id_pw[0]] === id_pw[1] ? 'login' : answer[id_pw[0]] === undefined ? 'fail' : 'wrong pw';
}

'코딩테스트' 카테고리의 다른 글

뇌주름 살리기 - 22 (입문캘린더 종료)  (0) 2025.02.16
뇌주름 살리기 - 21  (0) 2025.02.08
뇌주름 살리기 - 19  (0) 2025.02.04
뇌주름 살리기 - 18  (0) 2025.02.02
뇌주름 살리기 - 17  (0) 2025.01.31

특이한 정렬

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

function solution(numlist, n) {
    let answer = [];

    //n이 numlist에 없으면 넣어주고, 있으면 answer에 넣어주기
    if(numlist.indexOf(n) === -1) {
        numlist.push(n);
    } else {
        answer.push(n);
    }

    numlist.sort((x, y) => x - y);

    //left와 right의 끝은 각각 -1과 length로 구분
    let length = numlist.length;
    let left = numlist.indexOf(n) === 0 ? -1 : numlist.indexOf(n) - 1;
    let right = numlist.indexOf(n) === length - 1 ? length : numlist.indexOf(n) + 1;

    let absL = 0;
    let absR = 0;
    let isEndL = left < 0 ? true : false;
    let isEndR = right === length ? true : false;

    while(!isEndL || !isEndR) {
        if(isEndL) { //left 끝이니까 right만 진행
            answer.push(numlist[right]);
            right += 1;

            if(right === length) isEndR = true;
        } else if(isEndR) { //right 끝이니까 left만 진행
            answer.push(numlist[left]);
            left -= 1;

            if(left < 0) isEndL = true;
        } else {
            //left와 right의 절대값 크기 비교로 정렬 수행
            absL = Math.abs(n - numlist[left]);
            absR = Math.abs(n - numlist[right]);

            if(absL === absR) {
                answer.push(numlist[right]);
                answer.push(numlist[left]);
                right += 1;
                left -= 1;

                if(left < 0) isEndL = true;
                if(right === length) isEndR = true;
            } else if(absL < absR) {
                answer.push(numlist[left]);
                left -= 1;

                if(left < 0) isEndL = true;
            } else if(absL > absR) {
                answer.push(numlist[right]);
                right += 1;

                if(right === length) isEndR = true;
            }
        }
    }

    return answer;
}

'코딩테스트' 카테고리의 다른 글

뇌주름 살리기 - 21  (0) 2025.02.08
뇌주름 살리기 - 20  (0) 2025.02.06
뇌주름 살리기 - 18  (0) 2025.02.02
뇌주름 살리기 - 17  (0) 2025.01.31
뇌주름 살리기 - 16  (0) 2025.01.25

유한소수 판별하기

소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.

  • 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.

두 정수 ab가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.

function solution(a, b) {
    const GCD = (x, y) => y === 0 ? x : GCD(y, x % y);

    //분모를 최대공약수로 나눠서 소인수분해 
    let den = b / GCD(a, b);
    let answer = [];
    while(den > 1) {
        for(let i = 2; i <= den; i++) {
            if(den % i === 0) {
                if(!answer.includes(i)) answer.push(i);
                den /= i;
                break;
            }
        }
    }

    //소인수에 2와 5가 아닌 소수가 있으면 무한소수
    return answer.filter((x) => x !== 2 && x !== 5).length > 0 ? 2 : 1;
}

저주의 숫자 3

3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.

10진법 3x 마을 10진법 3x 마을
1 1 6 8
2 2 7 10
3 4 8 11
4 5 9 14
5 7 10 16

정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.

function solution(n) {
    const curse = function(x) {
        //1이나 2면 그대로 리턴
        if(x <= 2) {
            return x;
        }

        //재귀로 바로 앞 숫자가 몇으로 바뀌는지 확인하여 +1
        let reNum = curse(x - 1) + 1;
        while(1 === 1) {
            //숫자가 3의 배수면 +1
            //숫자에 3이라는게 있으면 +1
            //둘 다 해당 안 되면 탈출
            if(reNum % 3 === 0) {
                reNum += 1;
                continue;
            } else if(reNum.toString().split('').filter((x) => x === '3').length > 0) {
                reNum += 1;
                continue;
            } else {
                break;
            }
        }

        return reNum;
    }

    return curse(n);
}

'코딩테스트' 카테고리의 다른 글

뇌주름 살리기 - 20  (0) 2025.02.06
뇌주름 살리기 - 19  (0) 2025.02.04
뇌주름 살리기 - 17  (0) 2025.01.31
뇌주름 살리기 - 16  (0) 2025.01.25
뇌주름 살리기 - 15  (0) 2025.01.24

겹치는 선분의 길이

선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.

function solution(lines) {
    //각 선분의 [a, b]를 오름차순으로 정렬
    let lSort = lines.map((x) => x.sort((x, y) => x- y));

    //점 a와 b를 이엇을 때 인덱스 a가 1이 되도록 각 선분 초기화
    //0번은 [-100, -99], 1번은 [-99, -98]
    //동일하게 198번은 [98, 99], 199번은 [199, 200]
    let l = [new Array(200), new Array(200), new Array(200)];
    let a = 0;
    let b = 0;
    for(let i = 0; i < 3; i++) {
        //음수 처리를 위해 100 기준으로 계산
        a = lSort[i][0] < 0 ? 100 - Math.abs(lSort[i][0]) : 100 + lSort[i][0];
        b = lSort[i][1] < 0 ? 100 - Math.abs(lSort[i][1]) : 100 + lSort[i][1];

        for(let j = 0; j < 200; j++) {
            if(j >= a && j < b) {
                l[i][j] = 1;
            }
        }
    }

    //3개의 각 선분 비교 후 겹치는 부분이 1이 됨
    let lOver = new Array(200);
    for(let i = 0; i < 2; i++) {
        for(let j = i + 1; j < 3; j++) {
            for(let k = 0; k < 200; k++) {
                if(l[i][k] === 1 && l[i][k] === l[j][k]) {
                    lOver[k] = 1;
                }
            }
        }
    }

    //null이 아닌 1의 개수가 겹치는 선분의 길이
    return lOver.filter((x) => x === 1).length;
}

 

문제 제약조건에 모든 점은 정수라는 조건도 없고... 길이가 아닌 점을 기준으로 풀다보니 [[1,2],[2,3],[3,4]] 같은 케이스 해결이 안 되서 결국 다른 사람한테 힌트 받고 해결했다; 생각의 전환을 못하고 괜히 시간만 오래 잡아먹었네. 혹시나 중첩 for문을 줄이고 실행속도를 더 빠르게할 방안이 있을지 고민해보기.

'코딩테스트' 카테고리의 다른 글

뇌주름 살리기 - 19  (0) 2025.02.04
뇌주름 살리기 - 18  (0) 2025.02.02
뇌주름 살리기 - 16  (0) 2025.01.25
뇌주름 살리기 - 15  (0) 2025.01.24
뇌주름 살리기 - 14  (0) 2025.01.24

외계어 사전

PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 spell과 외계어 사전 dic이 매개변수로 주어집니다. spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가 dic에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.

function solution(spell, dic) {
    let answer = [];
    let dup = 0;

    //indexOf()와 lastIndexOf()가 같으면 한번 사용
    //같은데 -1이면 미사용, 다르면 두번 이상 사용 
    dic.forEach(function(x) {
        dup = 0;

        for(let j of spell) {
            if(x.indexOf(j) !== x.lastIndexOf(j)) {
                dup += 1;
                break;
            } else {
                if(x.indexOf(j) === -1) {
                    dup += 1;
                    break;
                }
            }
        }

        if(dup === 0) {
            answer.push(x);
        }
    });

    return answer.length > 0 ? 1 : 2;
}

평행

점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.

  • [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]

주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.

function solution(dots) {
    let answer = [];

    let x = 0;
    let y = 0;

    //직선의 기울기 (y2 - y1) / (x2 - x1)
    //x1과 x2가 같을 때 기울기는 y1
    for(let i = 0; i < 3; i++) {
        x = 0;
        y = 0;

        for(let j = i + 1; j < 4; j++) {
            x = dots[j][0] - dots[i][0];
            y = dots[j][1] - dots[i][1];

            //answer[점12, 점13, 점14, 점23, 점24, 점34]
            if(x === 0) {
                answer.push(0);
            } else {
                answer.push(y / x);
            }
        }
    }

    //서로 다른 두개의 점을 이을 경우에만 확인
    return answer[0] === answer[5] || answer[1] === answer[4] || answer[2] === answer[3] ? 1 : 0;
}

'코딩테스트' 카테고리의 다른 글

뇌주름 살리기 - 18  (0) 2025.02.02
뇌주름 살리기 - 17  (0) 2025.01.31
뇌주름 살리기 - 15  (0) 2025.01.24
뇌주름 살리기 - 14  (0) 2025.01.24
뇌주름 살리기 - 13  (1) 2025.01.22

최대값 만들기 (2)

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

function solution(numbers) {
    const sortNum = numbers.sort((x, y) => y - x);

    const front = sortNum[0] * sortNum[1];
    const back = sortNum[sortNum.length - 2] * sortNum[sortNum.length - 1];

    return front >= back ? front : back;
}

다항식 더하기

한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.

function solution(polynomial) {
    let coef = 0;
    let number = polynomial.split(' ').filter((x) => !x.includes('x') && x !== '+').reduce((x, y) => x + Number(y), 0);

    polynomial.split(' ').filter((x) => x.includes('x')).forEach(function(x) {
        if(x.replace('x', '') === '') {
            coef += 1;
        } else {
            coef += Number(x.replace('x', ''));
        }
    })

    let answer = '';

    if(coef === 1 && number > 0) {
        answer += `x + ${number}`;
    } else if (coef === 1 && number === 0) {
        answer += 'x';
    }else if(coef > 0 && number > 0) {
        answer += `${coef}x + ${number}`;
    } else if(coef > 0 && number === 0) {
        answer += `${coef}x`;
    } else {
        answer += number.toString();
    }

    return answer;
}

숨어있는 숫자의 덧셈 (2)

문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

function solution(my_string) {
    return my_string.replaceAll(/[a-zA-Z]/g, ',').split(',').filter((x) => x !== '').reduce((x, y) => x + Number(y), 0);
}

안전지대

다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.

지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.

function solution(board) {
    let answer = JSON.parse(JSON.stringify(board));
    let pi = 0, mi = 0, pj = 0, mj = 0;

    for(let i = 0; i < board.length; i++) {
        for(let j = 0; j < board.length; j++) {
            if(board[i][j] === 1) {
                pi = i + 1 === board.length ? i : i + 1;
                mi = i - 1 < 0 ? 0 : i - 1;
                pj = j + 1 === board.length ? j : j + 1;
                mj = j - 1 < 0 ? 0 : j - 1;

                answer[pi][j] = 1;
                answer[pi][pj] = 1;
                answer[pi][mj] = 1;
                answer[mi][j] = 1;
                answer[mi][pj] = 1;
                answer[mi][mj] = 1;
                answer[i][pj] = 1;
                answer[i][mj] = 1;
            }
        }
    }

    return answer.flat().filter((x) => x === 0).length;
}

삼각형의 완성조건 (2)

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

  • 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.

삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.

function solution(sides) {
    let answer = 0;

    if(sides[0] + sides[1] <= 3) {
        answer += 1;
    } else {
        answer += Math.max(...sides) - (Math.max(...sides) - Math.min(...sides) + 1);
        answer += (sides[0] + sides[1]) - Math.max(...sides);
    }    

    return answer;
}

'코딩테스트' 카테고리의 다른 글

뇌주름 살리기 - 17  (0) 2025.01.31
뇌주름 살리기 - 16  (0) 2025.01.25
뇌주름 살리기 - 14  (0) 2025.01.24
뇌주름 살리기 - 13  (1) 2025.01.22
뇌주름 살리기 - 12  (0) 2025.01.21

직사각형 넓이 구하기

2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다. 직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.

function solution(dots) {
    let x = [];
    let y = [];

    for(let i = 0; i < 4; i++) {
        if(!x.includes(dots[i][0])) x.push(dots[i][0]);
        if(!y.includes(dots[i][1])) y.push(dots[i][1]);
    }

    return Math.abs((x[0] - x[1]) * (y[0] - y[1]));
}

캐릭터의 좌표

머쓱이는 RPG게임을 하고 있습니다. 게임에는 up, down, left, right 방향키가 있으며 각 키를 누르면 위, 아래, 왼쪽, 오른쪽으로 한 칸씩 이동합니다. 예를 들어 [0,0]에서 up을 누른다면 캐릭터의 좌표는 [0, 1], down을 누른다면 [0, -1], left를 누른다면 [-1, 0], right를 누른다면 [1, 0]입니다. 머쓱이가 입력한 방향키의 배열 keyinput와 맵의 크기 board이 매개변수로 주어집니다. 캐릭터는 항상 [0,0]에서 시작할 때 키 입력이 모두 끝난 뒤에 캐릭터의 좌표 [x, y]를 return하도록 solution 함수를 완성해주세요.

  • [0, 0]board의 정 중앙에 위치합니다. 예를 들어 board의 가로 크기가 9라면 캐릭터는 왼쪽으로 최대 [-4, 0]까지 오른쪽으로 최대 [4, 0]까지 이동할 수 있습니다.
function solution(keyinput, board) {
    let answer = [0, 0];

    let maxW = (board[0] - 1) / 2;
    let maxH = (board[1] - 1) / 2;

    for(let i = 0; i < keyinput.length; i++) {
        switch(keyinput[i]) {
            case 'up':
                if(answer[1] + 1 <= maxH) answer[1] += 1;
                break;
            case 'down':
                if(Math.abs(answer[1] - 1) <= maxH) answer[1] -= 1;
                break;
            case 'left':
                if(Math.abs(answer[0] - 1) <= maxW) answer[0] -= 1;
                break;
            case 'right':
                if(answer[0] + 1 <= maxW) answer[0] += 1;
                break;
        }
    }

    return answer;
}

'코딩테스트' 카테고리의 다른 글

뇌주름 살리기 - 16  (0) 2025.01.25
뇌주름 살리기 - 15  (0) 2025.01.24
뇌주름 살리기 - 13  (1) 2025.01.22
뇌주름 살리기 - 12  (0) 2025.01.21
뇌주름 살리기 - 11  (0) 2025.01.20

문자열 안에 문자열

문자열 str1, str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return하도록 solution 함수를 완성해주세요.

function solution(str1, str2) {
    return str1.includes(str2) ? 1 : 2;
}

제곱수 판별하기

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

function solution(n) {
    return Math.sqrt(n) % 1 === 0 ? 1 : 2;
}

세균 증식

어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

function solution(n, t) {
    return n * (2 ** t);
}

문자열 정렬하기 (2)

영어 대소문자로 이루어진 문자열 my_string이 매개변수로 주어질 때, my_string을 모두 소문자로 바꾸고 알파벳 순서대로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요.

function solution(my_string) {
    return my_string.toLowerCase().split('').sort().toString().replaceAll(',', '');
}

7의 개수

머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.

function solution(array) {
    return array.map((x) => x.toString().split('')).flat().filter((x) => x === "7").length;
}

잘라서 배열에 저장하기

문자열 my_strn이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.

function solution(my_str, n) {
    let answer = [];

    for(let i = 0; i < Math.ceil(my_str.length / n); i++) {
        answer.push(my_str.slice(i * n, (i * n) + n));
    } 

    return answer;
}

머쓱이보다 키 큰 사람

머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.

function solution(array, height) {
    return array.filter((x) => x > height).length;
}

'코딩테스트' 카테고리의 다른 글

뇌주름 살리기 - 15  (0) 2025.01.24
뇌주름 살리기 - 14  (0) 2025.01.24
뇌주름 살리기 - 12  (0) 2025.01.21
뇌주름 살리기 - 11  (0) 2025.01.20
뇌주름 살리기 - 10  (0) 2025.01.19

+ Recent posts