기초부터 시작하는 코딩/Programmers

Programmers 문제를 풀어봅시다. Day17

kebab00 2023. 6. 4. 20:03

728x90

1. 가까운 수

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.

function solution(array, n) {
  array.sort(function(a, b) {
    return a - b;
  });
  let answer = 0;
  let com = n + 100;
  
  for (let i = 0; i < array.length; i++) {
    if (Math.abs(array[i] - n) < com) {
      com = Math.abs(array[i] - n);
      answer = array[i];
    }
  }
  return answer;
}

- 함수 solution은 먼저 array를 오름차순으로 정렬합니다. 

- 그리고 answer 변수를 0으로 초기화하고 com 변수를 n+100으로 초기화합니다. 

- 이후 array를 순회하면서 각 요소 i에 대해 i와 n의 차이의 절댓값이 com보다 작을 경우에 com을 갱신하고 answer를 i로 설정합니다.

- 마지막으로, answer를 반환합니다. 이 값은 array에서 n과 가장 가까운 값입니다.

sort()는 JavaScript 메서드로, 배열의 요소를 정렬하는 데 사용됩니다.

sort() 메서드는 기본적으로 문자열로 요소를 비교하여 정렬합니다. 따라서 숫자 배열을 정렬할 때는 비교 함수를 제공해야합니다. 비교 함수는 두 개의 인수를 받고, 비교 결과에 따라 요소의 순서를 결정합니다.

예를 들어, array.sort()는 array의 요소를 문자열로 변환한 후 유니코드 값에 따라 오름차순으로 정렬합니다. 이는 숫자를 제대로 정렬하지 못할 수 있습니다. 그러나 비교 함수를 사용하면 숫자를 올바르게 정렬할 수 있습니다.

비교 함수는 개의 인수 a b 받으며, a b보다 작은 값을 반환하면 a b 순서를 유지하고, a b보다 값을 반환하면 a b 순서를 바꿉니다. 비교 함수가 0 반환하면 a b 순서는 변경되지 않습니다.

2. 369게임

머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.

function solution(order) {
    const arr = order.toString().split('');
    let answer = 0;
    
    for (let i = 0; i < arr.length; i++) {
        const test = parseInt(arr[i]);
        if (test === 3 || test === 6 || test === 9) {
          answer++;
        }
    }
    return answer;
}

- 먼저 order 값을 문자열로 변환한 뒤, split('') 메서드를 사용하여 각 자릿수를 요소로 가지는 배열 arr을 생성합니다.

- answer 변수를 0으로 초기화하고, arr 배열을 순회하면서 각 자릿수를 정수로 변환한 값을 test 변수에 저장합니다.

- test 값이 3, 6, 또는 9 같은지 확인하고, 같다면 answer 증가시킵니다.

toString()은 JavaScript에서 객체를 문자열로 변환하는 메서드입니다. 객체의 값을 문자열로 표현하여 반환합니다.

주어진 코드에서 order 변수는 숫자 타입이므로 toString() 메서드를 사용하여 숫자를 문자열로 변환하고 있습니다. 이를 통해 order의 값을 문자열로 나타내는 arr 배열을 생성할 수 있습니다.

예를 들어, order가 123인 경우, order.toString()은 "123"이라는 문자열을 반환합니다. 이렇게 변환된 문자열은 split('') 메서드를 통해 각 자릿수를 요소로 가지는 배열로 분할되어 사용될 수 있습니다.

자바스크립트에서 toString() 메서드는 다양한 타입의 객체에서 사용할 있습니다. 숫자, 배열, 객체 다양한 객체에서 toString() 메서드를 호출하여 해당 객체를 문자열로 변환할 있습니다.

parseInt()는 문자열을 정수로 변환하는 JavaScript의 내장 함수입니다.

문자열을 정수로 해석하고, 해당 정수 값을 반환합니다.

parseInt() 함수는 두 개의 매개변수를 가질 수 있습니다. 첫 번째 매개변수는 변환하고자 하는 문자열이며, 두 번째 매개변수는 선택적으로 사용할 수 있는 진법(radix)을 나타냅니다. 진법은 변환할 문자열이 어떤 진법으로 표현되었는지를 지정하는 데 사용됩니다.

예를 들어, parseInt("123") 문자열 "123" 10진수로 해석하여 정수 123 반환합니다. 이때, 진법을 명시하지 않았으므로 기본적으로 10진수로 해석됩니다.

3. 암호 해독

군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.

  • 암호화된 문자열 cipher를 주고받습니다.
  • 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.

문자열 cipher 정수 code 매개변수로 주어질 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.

function solution(cipher, code) {
    let answer = '';
    let i = 1;
    
    while(code*i <= cipher.length) {
        answer += cipher.charAt(code*i-1);
        i++;
    }
    return answer;
}

- 먼저, answer 변수를 빈 문자열로 초기화합니다. 이 변수는 추출된 문자들을 저장하는 역할을 합니다.

- 그리고 i 변수를 1로 초기화합니다. 이 변수는 추출할 문자의 위치를 나타내는 인덱스입니다.

- while 루프를 사용하여 다음 작업을 수행합니다. code * i가 cipher 문자열의 길이보다 작거나 같은 동안 반복합니다. 이는 code 값의 배수 위치에 있는 문자를 추출하기 위한 조건입니다.

- 루프 내부에서는 answer에 cipher.charAt(code * i - 1)을 추가합니다. charAt() 함수는 문자열에서 주어진 인덱스에 해당하는 문자를 반환합니다.

- code * i - 1은 code 값의 배수 위치에서 1만큼 뒤의 문자를 가져오기 위해 사용됩니다.

- 인덱스는 0부터 시작하므로 1을 빼주는 것입니다.

- 루프가 반복될 때마다 i 증가시킵니다.

charAt()은 JavaScript 문자열에서 주어진 인덱스에 해당하는 문자를 반환하는 메서드입니다.

문자열은 문자들의 나열로 이루어져 있고, 각 문자는 고유한 인덱스를 가지고 있습니다.

charAt() 메서드는 주어진 인덱스에 해당하는 문자를 반환합니다.

이때, 인덱스는 0부터 시작하여 문자열의 길이보다 작아야 합니다.

예를 들어, 문자열 "Hello"에 charAt(0)을 호출하면 "H"가 반환됩니다. charAt(1)은 "e"를, charAt(2)는 "l"을, charAt(3)은 "l"을, charAt(4)는 "o"를 반환합니다.

주의해야 할 점은, charAt() 메서드는 문자열 인덱스를 기준으로 동작하므로 음수 인덱스를 사용하거나 문자열의 길이를 초과하는 인덱스를 사용하면 빈 문자열('')을 반환합니다.

예를 들어, 문자열 "Hello"에 charAt(-1)을 호출하면 빈 문자열이 반환됩니다. 또한, charAt(5)나 charAt(100)과 같이 문자열 길이를 초과하는 인덱스를 사용하면 역시 빈 문자열이 반환됩니다.

따라서 charAt() 메서드를 사용하면 주어진 문자열에서 특정 위치에 있는 문자를 추출할 있습니다.