30개가 넘어가니 앞에 숫자 붙이기도 힘들다.

숫자 없이 올려야지.

그건 그렇고 왜 맥북으로 프로그래머스에서 타이핑 하려면 백스페이스, 화살표 키가 안먹힐까?

나만 이상한건지 검색해도 안나오고, 재부팅을 아무리 해도 카라비너를 지워봐도 안된다.

걍 포기…








최대공약수와 최소공배수


문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.


제한 사항

두 수는 1이상 1000000이하의 자연수입니다.


입출력 예

n m return
3 12 [3, 12]
2 5 [1, 10]


입출력 예 설명

– 입출력 예 #1

위의 설명과 같습니다.


– 입출력 예 #2

자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.



function solution(n,m){
  let maxNum = Math.max(n,m);
  let minNum = Math.min(n,m);
  let divisor;
  let multiple;
  for (let i = 1 ; i <= maxNum ; i++) {
    if (n % i === 0 && m % i === 0) {
      divisor = i;
    }
  }
  for (let i = 1 ; i <= n * m ; i++) {
    if ((maxNum * i) % minNum === 0) {
      multiple = maxNum * i;
      return [divisor, multiple]
    }
  }
}


이렇게 하나하나 돌면서 구한 나와…

정말… 진짜… 대단한 유클리드 선생님…

A * B === 최대공약수 * 최대공배수

이제 알았으면 됐지!

기억하자~


function solution(n,m){
  let maxNum = Math.max(n,m);
  let divisor;
  for (let i = 1 ; i <= maxNum ; i++) {
    if (n % i === 0 && m % i === 0) {
      divisor = i;
    }
  }
  return [divisor, (n * m) / divisor]
}








같은 숫자는 싫어


문제 설명

배열 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]



function solution(arr)
{
  return arr.filter((v, i) => v !== arr[i-1]);
}


filter는 많이 안써봤는데 덕분에 다시 공부했다.


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


이건 for문으로 돌린건데, 호율성 테스트는 이쪽이 더 높게 나오는데 그게 뭔지 모르겠다..








이상한 문자 만들기


문제 설명

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


제한 사항

문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.

첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.


입출력 예

s return
“try hello world” “TrY HeLlO WoRlD”


입출력 예 설명

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



function solution(s) {
  return s.split(' ')
    .map((v) => {
      return [...v].map((vv, i) => {
        return i % 2 ? vv.toLowerCase() : vv.toUpperCase();
      }).join('');
    }).join(' ');
}


이게.. 이게 맞나?

map을 두번 돌리는게 맞나? 이래도 되는 건가?

괜찮은 건가..?