CodeWars_Day01
Code wars #1
안녕하세요, Derek 입니다!
오늘부터 틈틈히 CodeWars
문제를 풀고, 정리하고 외쿡인들의 멋진 풀이를.. 정리해보려고 합니다.
이 시리즈는 주저리주저리 글을 쓰진 않으려고 합니다. Derek의 풀이 + Code Wars
에 clever
코드를 정리하는 형식으로 시작하겠습니다.
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신난다 얏호.
Author And Source
이 문제에 관하여(CodeWars_Day01), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ghdtjrrl94/CodeWarsDay01저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)