CodeWars_Day01

22715 단어 CodewarsCodewars

Code wars #1

안녕하세요, Derek 입니다!

오늘부터 틈틈히 CodeWars 문제를 풀고, 정리하고 외쿡인들의 멋진 풀이를.. 정리해보려고 합니다.

이 시리즈는 주저리주저리 글을 쓰진 않으려고 합니다. Derek의 풀이 + Code Warsclever 코드를 정리하는 형식으로 시작하겠습니다.

Sort the odd

Level : 6kyu

You have an array of numbers.
Your task is to sort ascending odd numbers but even numbers must be on their places.

sortArray([5, 3, 2, 8, 1, 4]) == [1, 3, 2, 8, 5, 4];

Zero isn't an odd number and you don't need to move it. If you have an empty array, you need to return it.

짝수 및 0은 그대로, 나머지는 소팅입니다.

Derek의 풀이

function sortArray(array) {
  // Return a sorted array.
  let odds = [];
  
  if(array.length == 0)
    return array;
  
  array.forEach(i => {
    if(i % 2 == 1){
      odds.push(i);
      }
  })
  
  for(let i = 0 ; i < array.length ; i++){
    if(array[i] % 2 == 1){
      array[i] = -1;
    }  
  } 
  
  odds.sort((a, b) => a - b);
  
  let tmp = 0;
  
  for(let i = 0 ; i < array.length ; i++){
    if(array[i] == -1){
      array[i] = odds[tmp++];
    }
  }

  return array;
}

array에 홀수가 있으면 따로 odds 배열에 넣고, 그 자리를 -1로 메꿉니다.
odds 배열을 소팅 후, array 배열 중 값이 -1인 곳을 소팅한 친구들로 차례로 집어넣어주는 방식입니다.


Clever code 풀이

function sortArray(array) {
  const odd = array.filter((x) => x % 2).sort((a,b) => a - b);
  return array.map((x) => x % 2 ? odd.shift() : x);
}

dog간단하게 하셨네요.

array.filter((x) => x % 2)

이를 하면 홀수들로만 이루어진 배열이 나오고, 걔들을 바아로 .sort 으로 정렬합니다.

array.map((x) => x % 2 ? odd.shift() : x);

처음보는 친구입니다. 그래도 간단해요.
shift() 함수는 해당 배열의 첫 원소를 반환한다고 하네요.

map 으로 array 각 원소마다 홀수면, odd 배열의 맨 처음애로 교체하고, 아니면 그대로 냅두는 방식이네요.


개오지네요. 술이 겁나게 땡기지만 열심히 해야겠습니다.




Disemvowel Trolls

Level : 7kyu

Trolls are attacking your comment section!
A common way to deal with this situation is to remove all of the vowels from the trolls' comments, neutralizing the threat.
Your task is to write a function that takes a string and return a new string with all vowels removed.
For example, the string "This website is for losers LOL!" would become "Ths wbst s fr lsrs LL!".
Note: for this kata y isn't considered a vowel.

string 을 받으면, 그 문자열에서 vowels를 모두 제거하라는 문제입니다.

Derek의 풀이 및 Clever Code 풀이

세상에 똑같이 풀었다니, 기쁘지만 사실 구글링했답니다. 함정이에요.

정리해보겠습니다.

function disemvowel(str) {
  return str.replace(/[aeiou]/gi, '');
}

간단하죠? 정규식을 사용했습니다. 정규식을 / 이걸로 감싸는건 알고있었지만, 여러가지 문자가 되는건 처음봤습니다.

정리하면,

  • [a-z] : a ~ z 사이의 문자를 찾음
  • [abc] : a, b, c 중 하나를 찾음
  • [^abc] : a, b, c를 제외한 문자를 찾음

이런식으로 정규식을 사용할 수 있겠네요. 그렇다면, 코드상 a, e, i, o, u 중 아무거나 있으면 모두 빈 문자열로 replace 할 수 있겠어요.

정규식, 꼭 숙지해봅시다 여러분, 그리고 나새기도.




Create Phone Number

Level : 6kyu

Write a function that accepts an array of 10 integers (between 0 and 9), that returns a string of those numbers in the form of a phone number.

createPhoneNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) // => returns "(123) 456-7890"

10개 숫자로 이루어진 배열을 받으면.. 전화번호 형식으로 리턴해주는 문제였습니다.

Derek의 풀이 (헛짓거리)

let answer = "";

function createLocalNum(numbers, answer){
  answer += "(";
  
  for(let i = 0 ; i < 3 ; i++){
    answer += numbers[i];
  }
  
  answer += ") ";
}

function createMiddleNum(numbers, answer){
  for(let i = 3 ; i < 6 ; i++){
    answer += numbers[i];
  }
  answer += "-"
}

function createLastNum(numbers, answer){
  for(let i = 6 ; i < numbers.length ; i++){
    answer += numbers[i];
  }
}

function createPhoneNumber(numbers){
  let answer = "";
  createLocalNum(numbers, answer); 
  createMiddleNum(numbers, answer);
  createLastNum(numbers, answer);
  return answer;
}

어떻게든 answer 가 참조가 되겠지 했다.

안된다. 대박이다 증말 이게 도대체 무슨일이냐.

찾아보니 참조시킬라면 머 객체로 만들고 어쩌구 저쩌구.. 복잡하다.

약간 구글링을 했다. 참 javascript는 메소드가 너무너무 많다.

그나마 sort, map, filter, some, every, reduce, 등등 알았는데 잘 생각이 안떠오른다.
그러다가, slice 이 친구를 결정. 그렇게 멋진 외쿡 형님들 코드와 비슷해져갔다.

Clever Code 풀이

function createPhoneNumber(numbers){
  return `(${numbers.slice(0,3).join("")}) ${numbers.slice(3, 6).join("")}-${numbers.slice(6).join("")}`;
}

꼭 기억하자.

splice는 원래 배열에서 지우는거고 slice는 지워진걸 리턴한다.

둘 다 string이 아니라 배열에서 쓰는거다.

고로, 백틱을 사용해서 0번째 인덱스에서 3번째까지, 3번째에서 6번째 까지... 이렇게 잘랐다. 자르면, 디폴트로 , 로 구분이 간다. 그래서 뒤에

join("")

을 붙였다. 그럼 쉼표가 날아가고, 숫자만 붙는다. 개멋있다.

join은, 배열의 모든 요소를 연결해서 하나의 문자열!로 만든다. 짱 멋진 친구다.




아 그리고 8랭크에서 레벨이 올랐다.

dog신난다 얏호.

좋은 웹페이지 즐겨찾기