Level 1 - 위클리 챌린지 - 부족한 금액 계산하기

 

 문제

문제 설명

새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.

제한사항

  • 놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
  • 처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
  • 놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수

입출력 예

price money count result
3 20 4 10

입출력 예 설명

입출력 예 #1
이용금액이 3인 놀이기구를 4번 타고 싶은 고객이 현재 가진 금액이 20이라면, 총 필요한 놀이기구의 이용 금액은 30 (= 3+6+9+12) 이 되어 10만큼 부족하므로 10을 return 합니다.

 

 

 

 풀이

 사용언어 : javascript

function solution(price, money, count) {
    var answer = -1;
    
    let num = 0;
    for (let i = 1 ; i <= count; ++i ){
        num += (price * i);
    }
    
    if ( num < money )
        return 0;
    
    answer = num - money;

    return answer;
}

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/82612

Level 1 - 로또의 최고 순위와 최저순위 - 2021 Dev-Matching : 웹 백엔드 개발자(상반기)

 

 

 문제

 

문제 설명

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1

 

순위당첨  내용
1 6개 번호가 모두 일치
2 5개 번호가 일치
3 4개 번호가 일치
4 3개 번호가 일치
5 2개 번호가 일치
6(낙첨) 그 외

로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.
알아볼 수 없는 번호를 0으로 표기하기로 하고, 민우가 구매한 로또 번호 6개가 44, 1, 0, 0, 31 25라고 가정해보겠습니다. 당첨 번호 6개가 31, 10, 45, 1, 6, 19라면, 당첨 가능한 최고 순위와 최저 순위의 한 예는 아래와 같습니다.

당첨 번호 31 10 45 1 6 19 결과
최고 순위 번호 31 0→10 44 1 0→6 25 4개 번호 일치, 3등
최저 순위 번호 31 0→11 44 1 0→7 25 2개 번호 일치, 5등
  • 순서와 상관없이, 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌 걸로 인정됩니다.
  • 알아볼 수 없는 두 개의 번호를 각각 10, 6이라고 가정하면 3등에 당첨될 수 있습니다.
    • 3등을 만드는 다른 방법들도 존재합니다. 하지만, 2등 이상으로 만드는 것은 불가능합니다.
  • 알아볼 수 없는 두 개의 번호를 각각 11, 7이라고 가정하면 5등에 당첨될 수 있습니다.
    • 5등을 만드는 다른 방법들도 존재합니다. 하지만, 6등(낙첨)으로 만드는 것은 불가능합니다.

민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.

제한사항

  • lottos는 길이 6인 정수 배열입니다.
  • lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
    • 0은 알아볼 수 없는 숫자를 의미합니다.
    • 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
    • lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
  • win_nums은 길이 6인 정수 배열입니다.
  • win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
    • win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
    • win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.

입출력 예

lottos win_nums result
[44, 1, 0, 0, 31, 25] [31, 10, 45, 1, 6, 19] [3, 5]
[0, 0, 0, 0, 0, 0] [38, 19, 20, 40, 15, 25] [1, 6]
[45, 4, 35, 20, 3, 9] [20, 9, 3, 45, 4, 35] [1, 1]

입출력 예 설명

입출력 예 #1
문제 예시와 같습니다.

입출력 예 #2
알아볼 수 없는 번호들이 아래와 같았다면, 1등과 6등에 당첨될 수 있습니다.

당첨 번호 38 19 20 40 15 25 결과
최고 순위 번호 0→38 0→19 0→20 0→40 0→15 0→25 6개 번호 일치, 1등
최저 순위 번호 0→21 0→22 0→23 0→24 0→26 0→27 0개 번호 일치, 6등

입출력 예 #3
민우가 구매한 로또의 번호와 당첨 번호가 모두 일치하므로, 최고 순위와 최저 순위는 모두 1등입니다.


  1. 실제로 사용되는 로또 순위의 결정 방식과는 약간 다르지만, 이 문제에서는 지문에 명시된 대로 로또 순위를 결정하도록 합니다.  

 

 풀이

사용언어 : javascript

function solution(lottos, win_nums) {
    var answer = [];
    let cnt = 0;
    for (let i = 0; i<lottos.length; ++i){
        if( win_nums.includes(lottos[i]) ){
            
            cnt++;
        } 
        else if (lottos[i]==0){
            cnt++;    
        }
    }
    answer.push(getRank(cnt));
    
    cnt = 0;
    for (let i = 0; i<lottos.length; ++i){
        if( win_nums.includes(lottos[i]) ){
            
            cnt++;
        } 
    }
    answer.push(getRank(cnt));
    
    return answer;
}

function getRank(data){
    switch(data){
            
        case 1 :
        case 0 :
         return 6;
                
        case 2 :
          return 5;
            
        case 3 :
          return 4;
        
        case 4 :
         return 3;
        
        case 5 :
          return 2;
        
        case 6 :
         return 1;    
    }
}

 


출처 ㅣ https://programmers.co.kr/learn/courses/30/lessons/77484


Level 1 - 없는 숫자 더하기 - 월간 코드 챌린지 시즌 3

 

 

문제 설명

0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ numbers의 길이 ≤ 9
  • 0 ≤ numbers의 모든 수 ≤ 9
  • numbers의 모든 수는 서로 다릅니다.

입출력 예

 

numbers result
[1,2,3,4,6,7,8,0] 14
[5,8,4,0,6,7,9] 6

입출력 예 설명

입출력 예 #1

  • 5, 9가 numbers에 없으므로, 5 + 9 = 14를 return 해야 합니다.

입출력 예 #2

  • 1, 2, 3이 numbers에 없으므로, 1 + 2 + 3 = 6을 return 해야 합니다.

 

부제목사용

사용언어 : javascript

 

function solution(numbers) {
    var answer = 0;
    numbers.sort((a,b)=>{
        return a-b;
    });
    let num = []; 
    for ( let i = 0 ; i <= 9; ++i ){ 
        num.push(i); 
    } 
    
    for ( let i = 0; i < numbers.length; ++i ){
        if ( num.includes(numbers[i])){ 
            let data = 0;
            for ( let j = 0; j < num.length; ++ j ){
                if (num[j] == numbers[i]){
                    data = j;
                    break;
                } 
            }
            num.splice(data, 1); 
        } 
    } 
    
    for ( let i = 0 ; i <num.length; ++i ){
        
        answer += num[i];
    }

    return answer;
}
function solution(numbers) {
    let cnt = 0;
    for( let i=0; i<10; i++ ){
        if(!(numbers.includes(i))) 
            cnt+= i;
    }
    return cnt;
}

 

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/86051

 

Level 1 - 같은 숫자는 싫어 - 월간 코드 챌린지 시즌 2

 

 문제

문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.


제한사항

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

입출력 예

absolutes signs result
[4,7,12] [true,false,true] 9
[1,2,3] [false,false,true] 0

입출력 예 설명
입출력 예 #1

  • signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
  • 따라서 세 수의 합인 9를 return 해야 합니다.

입출력 예 #2

  • signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
  • 따라서 세 수의 합인 0을 return 해야 합니다.

 

 풀이

사용언어 : javascript

function solution(absolutes, signs) { 
	var answer = 0; 
	for ( let i = 0 ; i < absolutes.length; ++i )
	{
		answer += absolutes[i] * ( signs[i] == true ? 1 : -1 ); 
	} 
	return answer; 
}


출처 : https://programmers.co.kr/learn/courses/30/lessons/76501

Level 1 - 같은 숫자는 싫어 - 연습문제

 

 

 문제

문제 설명

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

  • arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
  • arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.

배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 배열 arr의 크기 : 1,000,000 이하의 자연수
  • 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

입출력 예

arr answer
[1,1,3,3,0,1,1] [1,3,0,1]
[4,4,4,3,3] [4,3]

입출력 예 설명

입출력 예 #1,2
문제의 예시와 같습니다.

 

 

 

 풀이

사용언어 : javascript

 

function solution(arr)
{
    var answer = [];
    let idx = 0;
    answer.push(arr[0]);
    while ( idx < arr.length-1){
        
        if ( arr[idx] != arr[idx+1] ){
            answer.push(arr[idx+1]);
            ++idx;
        }
        else {
           ++idx;
        }
    }
    return answer;
}
function solution(arr)
{
    var answer = [];
    for( let i = 0 ; i < arr.length; ++i ){
                
        if ( arr[i] == arr[i+1])
            continue;
        
        answer.push(arr[i]);
    }
      
    return answer;
}

 

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/12906

Level 1 - 두 개 뽑아서 더하기 - 월간 코드 챌린지 시즌1

 

 문제

문제 설명

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.


제한사항

  • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예

numbers result
[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

입출력 예 설명

입출력 예 #1

  • 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
  • 3 = 2 + 1 입니다.
  • 4 = 1 + 3 입니다.
  • 5 = 1 + 4 = 2 + 3 입니다.
  • 6 = 2 + 4 입니다.
  • 7 = 3 + 4 입니다.
  • 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.

입출력 예 #2

  • 2 = 0 + 2 입니다.
  • 5 = 5 + 0 입니다.
  • 7 = 0 + 7 = 5 + 2 입니다.
  • 9 = 2 + 7 입니다.
  • 12 = 5 + 7 입니다.
  • 따라서 [2,5,7,9,12] 를 return 해야 합니다.

 

 

 풀이

사용언어 : javascript

 

function solution(numbers) {
    var answer = [];
    
    for (let i = 0; i < numbers.length; ++i ) {
        for (let j = 0; j < numbers.length; ++j ) {
            if ( i != j ){
                answer.push ( numbers[i] + numbers[j] );    
            }
        }   
    }
    
    
    answer = Array.from(new Set(answer));
    answer.sort((a,b)=>{
       return a-b; 
    });
    
    return answer;
}
function solution(numbers) {
    var answer = [];
    
    for (let i = 0; i < numbers.length; ++i ) {
        for (let j = 0; j < numbers.length; ++j ) {
            if ( i != j && !answer.includes(numbers[i] + numbers[j])){
                answer.push ( numbers[i] + numbers[j] );    
            }
        }   
    }
    
    answer.sort((a,b)=>{
       return a-b; 
    });
    
    return answer;
}

 

 

1. 먼저 중복된 숫자를 다 포함시킨뒤 Array.from(new Set())을 사용해서 중복 숫자를 제거 하는 방법

2. includes함수를 통해 애초에 중복된 수가 있다면 추가하지 않는 방법

 

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/68644

Level 1 - K번째수 - 정렬문제

 

 문제

문제 설명

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

제한사항

  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.

입출력 예

array commands return
[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

입출력 예 설명

[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.
[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.
[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.

 

 풀이

사용언어 : javascript

function solution(array, commands) {
    var answer = [];
    
    for( let i = 0; i < commands.length; ++i ){
        
        let dummy = [];
        for ( let j = commands[i][0]; j <= commands[i][1]; ++j ){
            
            
            dummy.push(array[j-1]);
        }
        
        dummy.sort((a,b)=>{
            return a-b;
        });
        
        answer.push(dummy[commands[i][2]-1]);
    }
    
    return answer;
}

 

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/42748

Level 1 - 문자열 내 p와 y의 개수 - 연습문제

 

 문제

 

문제 설명

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

제한사항

  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다.

입출력 예

s answer
"pPoooyY" true
"Pyy" false

입출력 예 설명

입출력 예 #1
'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.

입출력 예 #2
'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.

※ 공지 - 2021년 8월 23일 테스트케이스가 추가되었습니다.

 

 

 풀이

사용언어 javascript

 

function solution(s){
    s = s.split('');
    var answer = true;
    let pCnt = 0;
    let yCnt = 0;
    for ( let i = 0 ; i < s.length; ++i ) {
        
        if ( 'p' == s[i] || 'P' == s[i] ) ++pCnt;
        
        if ( 'y' == s[i] || 'Y' == s[i] ) ++yCnt;
    }
    
    if ( pCnt == 0 && yCnt == 0 ) return true;
    
    answer = pCnt == yCnt ? true : false;
    
    return answer;
}

 

 

출처 https://programmers.co.kr/learn/courses/30/lessons/12916

+ Recent posts