오늘부터 틈틈히 CodeWars 문제를 풀고, 정리하고 외쿡인들의 멋진 풀이를.. 정리해보려고 합니다.
이 시리즈는 주저리주저리 글을 쓰진 않으려고 합니다. Derek의 풀이 + Code Wars에 clever 코드를 정리하는 형식으로 시작하겠습니다. .gif)
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은 그대로, 나머지는 소팅입니다.
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인 곳을 소팅한 친구들로 차례로 집어넣어주는 방식입니다.
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 배열의 맨 처음애로 교체하고, 아니면 그대로 냅두는 방식이네요.
개오지네요. 술이 겁나게 땡기지만 열심히 해야겠습니다.
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를 모두 제거하라는 문제입니다.
세상에 똑같이 풀었다니, 기쁘지만 사실 구글링했답니다. 함정이에요.
정리해보겠습니다.
function disemvowel(str) {
return str.replace(/[aeiou]/gi, '');
}
간단하죠? 정규식을 사용했습니다. 정규식을 / 이걸로 감싸는건 알고있었지만, 여러가지 문자가 되는건 처음봤습니다.
정리하면,
이런식으로 정규식을 사용할 수 있겠네요. 그렇다면, 코드상 a, e, i, o, u 중 아무거나 있으면 모두 빈 문자열로 replace 할 수 있겠어요.
정규식, 꼭 숙지해봅시다 여러분, 그리고 나새기도.
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개 숫자로 이루어진 배열을 받으면.. 전화번호 형식으로 리턴해주는 문제였습니다.
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 이 친구를 결정. 그렇게 멋진 외쿡 형님들 코드와 비슷해져갔다.
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("")
을 붙였다. 그럼 쉼표가 날아가고, 숫자만 붙는다. 개멋있다.
아 그리고 8랭크에서 레벨이 올랐다.

dog신난다 얏호.