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

Level 1 - 이상한 문자 만들기 - 연습문제

 

 문제

문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 사항

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예

s return
"try hello world" "TrY HeLlO WoRlD"

입출력 예 설명

"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.

 

 

 풀이

사용언어 javascript

function solution(s) {
    
    var answer = '';
    let string = s.split('');

    let idx = 0;
    for ( let i = 0; i < string.length; ++i ){
        
        string[i] = (idx % 2 == 0) ? string[i].toUpperCase(): string[i].toLowerCase();
        answer += string[i];
        if ( string[i] === ' '){
            idx = 0;
        }else{
            ++idx;    
        }
    }
    
    
    return answer;
}

 

 

문제를 잘 못 이해해서 시간이 조금 걸렸다.

단어별 홀짝으로 이해하지 않고 풀었더니 헛수고를 함

 

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

 

Level 1 - 문자열 내림차순으로 배치하기 - 연습문제

 

 문제

문제 설명

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

제한 사항

  • str은 길이 1 이상인 문자열입니다.

입출력 예

s return
"Zbcdefg" "gfedcbZ"

 

 

 

 풀이

 사용언어 : javascript

 

function solution(s){
	return s.split('').sort().reverse().join('');
}

function solution(s) {
    let answer = [];
    let dumy = [];
    s = s.split('');
    for ( let i = 0 ; i < s.length; ++i ) {
        dumy.push(s[i].charCodeAt(0)) ; 
    }
    
    dumy.sort((a,b)=>{
       return b-a; 
    });
    
    for ( let i = 0 ; i < dumy.length; ++i ) {
        answer += String.fromCharCode(dumy[i]); 
    }
    return answer;
}

 

 

 

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

Level 1 - 약수의 합 - 연습문제

 

 문제

문제 설명

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

제한 사항

  • n은 0 이상 3000이하인 정수입니다.

입출력 예

n return
12 28
5 6

입출력 예 설명

입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.

 

 

 풀이

사용언어 : javascript

function solution(n) {
    var answer = 0;
      
    for ( let i = 1; i <= n; ++i){
        if ( n % i == 0 ){
          answer += i;   
        }    
    }
    
    return answer;
}

 

 

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

Level 1 - 자연수 뒤집어 배열로 만들기 - 연습문제

 

 문제

문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한 조건

  • n은 10,000,000,000이하인 자연수입니다.

입출력 예

n return
12345 [5,4,3,2,1]

 

 

 

 풀이

사용언어 javascript 

function solution(n) {
    
    var answer = String(n).split('');
    answer = answer.reverse();
    for ( let i in answer ){
        answer[i] = parseInt ( answer[i] );
    }
    return answer;
}

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

Level 1 - 나누어 떨어지는 숫자 배열 - 연습문제

 

 문제

문제 설명

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

제한사항

  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.

입출력 예

arr divisor return
[5, 9, 7, 10] 5 [5, 10]
[2, 36, 1, 3] 1 [1, 2, 3, 36]
[3,2,6] 10 [-1]

입출력 예 설명

입출력 예#1
arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다. 따라서 [5, 10]을 리턴합니다.

입출력 예#2
arr의 모든 원소는 1으로 나누어 떨어집니다. 원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴합니다.

입출력 예#3
3, 2, 6은 10으로 나누어 떨어지지 않습니다. 나누어 떨어지는 원소가 없으므로 [-1]을 리턴합니다.

 

 

 

 풀이

사용언어 : javascript

 

function solution(arr, divisor) {
    var answer = [];
    
    for ( let i in arr ) {
        if ( arr[i] % divisor == 0 ){
         answer.push(arr[i]);
        }
    }
    
    if (answer.length == 0 ){
        answer.push(-1);
        return answer;
    }
        
    answer.sort((a,b)=>{
      return a-b;  
    });
    
    return answer;
}

 

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

+ Recent posts