문제(출처: 프로그래머스)

문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.

 

▶ 내가 푼 방식

function solution(my_string) {
    var answer = '';
    const lowerCase= /^[a-z]/;
    my_string.split('').map(w =>{
        answer += lowerCase.test(w) ? w.toUpperCase() : w.toLowerCase() 
    })
    return answer;
}

 

 다른 유저가 푼 방식

// 유저 1 정규 표현식 을 사용 안하고 적용
function solution(my_string) {
    return my_string.split('').map(n => 
    n === n.toUpperCase() ? n.toLowerCase() : n.toUpperCase()).join('')
}

 

 배운 것들

     -  대문자 소문자를 확인 할때 정규 표현식을 사용하지 않아도 가능한 방식

문제(출처: 프로그래머스)

군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
암호화된 문자열 cipher를 주고받습니다.
그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.

 

▶ 내가 푼 방식

function solution(cipher, code) {
    const n = Math.floor(cipher.length/code)
    let answer = "";
    for(let i=1; i<=n; i++){
        answer += cipher[code*i-1]
    }
    return answer;
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(cipher, code) {
  var answer = "";
  for (let i = code - 1; i < cipher.length; i += code) {
    answer += cipher[i];
  }
  return answer;
}


// 유저 2
function solution(cipher, code) {
    var answer = '';

    for(let i = 1; i <= cipher.length; i++) {
        if(i % code === 0)
           answer = answer +  cipher[i - 1]
    }

    return answer;
}

 

 배운 것들

     -  for 문에서 숫자 증가방식을 바꿀 수 있다는 것

     - 

문제(출처: 프로그래머스)

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
"가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다."
삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다.
세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.

 

▶ 내가 푼 방식

function solution(sides) {
    const max = Math.max(...sides);
    sides.splice(sides.indexOf(max),1)
    if (max < (sides[0] + sides[1])){
        return 1
    }
    return 2;
}

 

 다른 유저가 푼 방식

// 유저 1 : 정렬 + 삼항연산자
function solution(sides) {
    sides = sides.sort((a,b) => a-b)
    return sides[0]+sides[1] > sides[2] ? 1 : 2;
}


// 유저 2 : 정렬 + 구조 분해 할당 + 삼항연산자
function solution(sides) {
    const [long, a, b] = sides.sort((a,b) => b-a);

    return long < a + b ? 1 : 2

}

 

 배운 것들

     -  공부한 것들을 최대한 활용하고 시안성을 좀더 고려하자

     - 

sort() 함수의 작동 원리

인자의 순서가 와 비교를 어떻게 하는가에 따라서 기준이 되는 인자가 앞으로 가고 뒤로 가야하는지 를 알려주는 함수

즉, 비교 방식에 따라 정렬방식이 결정된다.

 

(ex 1) numbers.sort(( a, b ) => a - b ) : 첫번째 인자( a ) 의 위치를 결정하겠다.
        음수 : 첫번째 인자(a)가 앞으로 = 작은 수가 앞으로
        양수 : 첫번째 인자(a)가 뒤로 

         0     : 순서 그대로

 

(ex 2 ) numbers.sort(( a , b ) => b - a) : b 의 위치를 결정하겠다.
        음수 : 두번째 인자 (b)가 뒤로
        양수 : 두번째 인자 (b)가 앞으로  = 큰 수가 앞으로

         0     : 순서 그대로

 

(ex 3 ) numbers.sort(( b, a ) => a - b ) : 두번째 인자(a) 의 위치를 결정하겠다. 
        음수 : 두번째 인자(a)가 뒤로
        양수 : 두번째 인자(a)가 앞으로  = 큰 수가 앞으로

         0     : 순서 그대로

 

즉,  numbers.sort((b, a ) => a - b ) === numbers.sort((a,b) => b - a)

 

 

 

'프로그래밍 > JavaScript' 카테고리의 다른 글

[ JS ] Promise.all() 사용하는 이유  (0) 2024.05.06
[ JS ] Promise 설명  (0) 2024.05.05
[JS] call, apply, bind  (0) 2024.03.06
객체(Object), 객체 메소드  (0) 2023.08.03
배열 뒤집기  (0) 2023.07.30

문제(출처: 프로그래머스)

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

 

제한 사항

  • -10,000 ≤ numbers의 원소 ≤ 10,000
  • 2 ≤ numbers 의 길이 ≤ 100

▶ 내가 푼 방식

//내가 작성한 코드
function solution(numbers) {
    let max = -10000*10000;
    for (let i =0; i < numbers.length; i ++){
        for (let j = 0; j < numbers.length; j++){
            if ((i!==j) && (numbers[i] * numbers[j] > max)) {
                max = numbers[i] * numbers[j];
            }
        }
    }
    return max;
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(numbers) {
    const N = numbers.length;

    numbers.sort((a, b) => a - b);    // 오름차순 정렬

    return Math.max(
        numbers[N - 1] * numbers[N - 2],  // 가장 큰 두 수의 곱
        numbers[0] * numbers[1]           // 가장 작은 두 수(가장 큰 음수 두 개)의 곱
    );
}

// 유저 2
function solution(numbers) {
    var answer = [];
    for(let i = 0; i < numbers.length - 1; i++){
        for(let j = i + 1; j < numbers.length; j++){
            answer.push(numbers[i] * numbers[j]);
        }
    }
    return Math.max(...answer);
}

 

 배운 것들

     - 제한 사항을 깊게 고려하지 않아서 계속 오류가 났다. 문제를 풀때 꼭 제한 사항도 염두에 두자 

     - 오름차순으로 정렬하는 방법 : numbers.sort((a, b) => a - b); 

         = 원리 :  기준을 a 로 잡아서 작은 숫자(값)이 앞으로
                 "a  < b" 인 경우  →  a - b = 음수   a 가 b 보다 으로 배치 ( 작은 값이 앞으로)

                 "a  > b" 인 경우  →  a - b = 양수   a 가 b 보다 로 배치

                 "a  = b" 인 경우  →  a - b = 0   → a 와 b 위치 그대로

     - 내림차순으로 정렬하는 방법 : numbers.sort((a, b) => b - a); 

         = 원리 :  기준을 b 로 잡아서 큰 숫자(값)이 앞으로
                 "b  < a" 인 경우  →  b - a = 음수   b 가 a 보다 로 배치 (= a 가 으로 배치)

                 "b  > a" 인 경우  →  b - a = 양수   b 가 a 보다 으로 배치 (=a 가 로 배치)

                 "a  = b" 인 경우  →  a - b = 0   → a 와 b 위치 그대로

+ Recent posts