개미 군단

개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.

function solution(hp) {
    return Math.floor(hp / 5) + Math.floor(hp % 5 / 3) + (hp % 5 % 3);
}

모스부호 (1)

머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.

function solution(letter) {
    morse = { 
        '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
        '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
        '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
        '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
        '-.--':'y','--..':'z'
    }

    return letter.split(' ').map(x => morse[x]).toString().replaceAll(',', '');
}

가위 바위 보

가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.

function solution(rsp) {
    return rsp.split('').map(x => Number(x) === 2 ? 0 : (Number(x) === 0 ? 5 : 2)).toString().replaceAll(',', '');
}

구슬을 나누는 경우의 수

머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.

function solution(balls, share) {
    //const factorial = (x) => x === 1 ? 1 : x * factorial(x - 1);
    //return factorial(balls) / (factorial(balls - share) * factorial(share));

    const factorial = function(x) {
        let fac = 1;

        if(x === 1) return fac;

        for(let i = 2; i <= x; i++) {
            fac *= i;
        }

        return fac;
    }

    return Math.round(factorial(balls) / (factorial(balls - share) * factorial(share)));
}

처음에 주석처럼 했다가 런타임 에러 + 실패가 있어서 질문하기 뒤져보니 재귀함수 호출 시 발생하는 스택 오버플로우랑 일부 소수로 떨어지는 값을 때문에 반올림 처리.


점의 위치 구하기

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.

  • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
  • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
  • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
  • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.

x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

function solution(dot) {
    let answer = 0;

    if(dot[0] > 0 && dot[1] > 0) {
        answer = 1;
    } else if(dot[0] < 0 && dot[1] > 0) {
        answer = 2;
    } else if(dot[0] < 0 && dot[1] < 0) {
        answer = 3;
    } else if(dot[0] > 0 && dot[1] < 0) {
        answer = 4;
    }

    return answer;
}

2차원으로 만들기

정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.

num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.

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

    for(let i = 0, j = 0; i < num_list.length / n; i++, j += n) {
        answer[i] = num_list.slice(j, j + n);
    }

    return answer;
}

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

뇌주름 살리기 - 7  (0) 2025.01.14
뇌주름 살리기 - 6  (0) 2025.01.13
뇌주름 살리기 - 4  (0) 2025.01.11
뇌주름 살리기 - 3  (0) 2025.01.10
뇌주름 살리기 - 2  (0) 2025.01.09

특정 문자 제거하기

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

function solution(my_string, letter) {
    return my_string.replaceAll(letter, '');
}

각도기

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

function solution(angle) {
    let answer = 0;

    if(angle < 90) {
        answer = 1;
    } else if(angle === 90) {
        answer = 2;
    } else if(angle < 180) {
        answer = 3;
    } else {
        answer = 4;
    }

    return answer;
}

양꼬치

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

function solution(n, k) {
    return n * 12000 + (k - Math.floor(n/10)) * 2000;
}

짝수의 합

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

function solution(n) {
    let answer = 0;

    for(let i = 1; i <= n; i++) {
        if(i % 2 === 0) answer += i;
    }

    return answer;
}

배열 자르기

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

function solution(numbers, num1, num2) {
    return numbers.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) {
    return age.toString().split('').map(x => String.fromCharCode(Number(x) + 97)).toString().replaceAll(',', '');
}

진료 순서 구하기

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

function solution(emergency) {
    let tempArr = [...emergency];
    let answer = [];

    tempArr.sort((a, b) => a - b);
    tempArr.map((x, i) => answer[emergency.indexOf(x)] = emergency.length - i);

    return answer;
}

순서쌍의 개수

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

function solution(n) {
    let answer = 0;

    for(let i = 1; i <= n; i++) {
        for(let j = Math.floor(n / i); j >= 1; j--) {
            if(i * j === n) {
                answer += 1;
                continue;
            }
        }
    }

    return answer;
}

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

뇌주름 살리기 - 6  (0) 2025.01.13
뇌주름 살리기 - 5  (0) 2025.01.12
뇌주름 살리기 - 3  (0) 2025.01.10
뇌주름 살리기 - 2  (0) 2025.01.09
뇌주름 살리기 - 1  (0) 2025.01.09

옷가게 할인 받기

머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다. 구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.

function solution(price) {
    let answer = 0;

    if(price >= 500000) {
        answer = Math.floor(price * 0.8);
    } else if(price >= 300000) {
        answer = Math.floor(price * 0.9);
    } else if(price >= 100000) {
        answer = Math.floor(price * 0.95);
    } else {
        answer = price;
    }

    return answer;
}

아이스 아메리카노

머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 아이스 아메리카노는 한잔에 5,500원입니다. 머쓱이가 가지고 있는 돈 money가 매개변수로 주어질 때, 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

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

    answer.push(Math.floor(money / 5500));
    answer.push(money - (Math.floor(money / 5500) * 5500));

    return answer;
}

배열 뒤집기

정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

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

    num_list.map((x, i) => answer[num_list.length - 1 - i] = x);

    return answer;
}

문자열 뒤집기

문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.

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

    my_string.split('').map((x, i) => answer[my_string.length - 1 - i] = x);

    return answer.toString().replaceAll(',', '');
}

직각삼각형 출력하기

"*"의 높이와 너비를 1이라고 했을 때, "*"을 이용해 직각 이등변 삼각형을 그리려고합니다. 정수 n 이 주어지면 높이와 너비가 n 인 직각 이등변 삼각형을 출력하도록 코드를 작성해보세요.

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

rl.on('line', function (line) {
    input = line.split(' ');
}).on('close', function () {
    for(let i = 1; i <= input[0]; i++) {
        console.log('*'.repeat(i));
    }
});

짝수 홀수 개수

정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

function solution(num_list) {
    return [num_list.filter(x => x % 2 === 0).length, num_list.filter(x => x % 2 === 1).length];
}

문자 반복 출력하기

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.

function solution(my_string, n) {
    return my_string.split('').map(x => x.repeat(n)).toString().replaceAll(',', '');
}

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

뇌주름 살리기 - 6  (0) 2025.01.13
뇌주름 살리기 - 5  (0) 2025.01.12
뇌주름 살리기 - 4  (0) 2025.01.11
뇌주름 살리기 - 2  (0) 2025.01.09
뇌주름 살리기 - 1  (0) 2025.01.09

일년에 몇 번 안 쓰는 기능을 쓰다보니 오류 때문에 진행이 안 된다고 연락이 왔다.

JBWEB002004: More than the maximum number of request parameters (GET plus POST) for a single request (10000) were detected. Any parameters beyond this limit have been ignored. To change this limit, set the maxParameterCount attribute on the Connector.

 

처음에는 제대로 안 읽고 single request 뒤의 (10000)에만 집중해서 WEB 서버에 접속해 Apache의 ssl.conf 파일을 여니 LimitRequestFields가 딱 10000이었다. 문제는 스테이징 서버도 동일 설정 값이어서 운영 서버에서 오류가 나는게 이상한 상황이었지만, 일단 10000에 꽂혔으니 늘려봤다. 당연히 결과는 허탕.

<system-properties>
    ...
    <property name="org.apache.tomcat.util.http.Parameters.MAX_COUNT" value="20000"/>
</system-properties>

 

찾아보니 JBoss의 standalone.xml에 위 내용을 추가해보라고 해서 추가하니 잘 됐다. 기본값이 10000이었다.

피자 나눠 먹기 (1)

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.

function solution(n) {
    return Math.ceil(n/7);
}

피자 나눠 먹기 (2)

머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

function solution(n) {
    const gcd = (a, b) => b === 0 ? a : gcd(b, a % b);
    const lcm = (a, b) => (a * b) / gcd(a, b);

    return lcm(6, n) / 6;
}

피자 나눠 먹기 (3)

머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

function solution(slice, n) {
    return Math.ceil(n / slice);
}

배열의 평균값

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

function solution(numbers) {
    return numbers.reduce((x, y) => x + y, 0) / numbers.length;
}

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

뇌주름 살리기 - 6  (0) 2025.01.13
뇌주름 살리기 - 5  (0) 2025.01.12
뇌주름 살리기 - 4  (0) 2025.01.11
뇌주름 살리기 - 3  (0) 2025.01.10
뇌주름 살리기 - 1  (0) 2025.01.09

실무에 찌들어 살다보니 한동안 계속 쓰던 JavaScript 기본도 못하게 되어서,
프로그래머스 코딩테스트 연습의 입문 캘린더로 조금씩 시작하기로 했다.


배열 두 배 만들기

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

function solution(numbers) {
       return numbers.map(x => x * 2);
}

중앙값 구하기

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

function solution(array) {
    const answer = array.sort((a,b) => a-b);

    return answer[Math.floor(answer.length / 2)];
}

최빈값 구하기

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

function solution(array) {
    let tmpArr = [];
    array.forEach(x => tmpArr[x] === undefined ? tmpArr[x] = 1 : tmpArr[x] += 1);

    const max = tmpArr.reduce((x,y) => (x > y) ? x : y);
    const answer = tmpArr.filter(x => x === max);

    return answer.length > 1 ? -1 : tmpArr.indexOf(max);
}

짝수는 싫어요

정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.

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

    for(let i = 1 ; i <= n ; i++) {
        if(i % 2 === 1) {
            answer.push(i);
        }
    }

    return answer;
}

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

뇌주름 살리기 - 6  (0) 2025.01.13
뇌주름 살리기 - 5  (0) 2025.01.12
뇌주름 살리기 - 4  (0) 2025.01.11
뇌주름 살리기 - 3  (0) 2025.01.10
뇌주름 살리기 - 2  (0) 2025.01.09

+ Recent posts