What is the growth? ( 6 kyu )

문제

Write the function getGrowth(), which accepts an arbitrary number of comma separated integers and returns the difference between each subsequent and previous number in the series, as a string.

The function must return a string value where each “growth instance” is separated by a comma followed by a space character.

Example 1:

getGrowth(1, 2, 3)  // returns the string: "1 (+0, +0%), 2 (+1, +100%), 3 (+1, +50%)"

배열이 들어오면 이전값과 비교해서 변화를 적어 리턴하는 문제

풀이

function getGrowth(...args){
  let result = `${args[0]} (+0, +0%), `;
  for ( let i = 1; i < args.length; i++ ) {
    if ( args[i]-args[i-1] >= 0 ) {
      result += `${args[i]} (+${args[i]-args[i-1]}, +${Math.round((args[i]-args[i-1])/args[i-1]*100)}%), `
    } else {
      result += `${args[i]} (${args[i]-args[i-1]}, ${Math.round((args[i]-args[i-1])/args[i-1]*100)}%), `
    }
  }
  return result.slice(0, result.length-2);
}

그냥 써져있는대로 맞춰 씀..

다른 사람의 풀이

비슷함


'자료구조, 알고리즘 > Codewars 문제' 카테고리의 다른 글

Array Deep Count ( 6 kyu )  (0) 2017.12.27
Fibonacci, Tribonacci and friends ( 6 kyu )  (0) 2017.12.23
What is the growth? ( 6 kyu )  (0) 2017.12.22
Dashatize it ( 6 kyu )  (0) 2017.12.20
String average ( 6 kyu )  (0) 2017.12.19
Array Helper ( 6 kyu )  (0) 2017.12.19

Dashatize it ( 6 kyu )

문제

Given a number, return a string with dash’-‘marks before and after each odd integer, but do not begin or end the string with a dash mark.

Ex:

dashatize(274) -> '2-7-4'
dashatize(6815) -> '68-1-5'

홀수는 앞뒤로 대시를 붙여 리턴하는 문제

풀이

function dashatize(num) {
  let str = num.toString();
  let result = '';
  for ( let i = 0; i < str.length; i++ ) {
    str[i] % 2 === 1 ? result += `-${str[i]}-` : result += str[i];
  }
  while ( result[0] === '-' ) {
    result = result.slice(1)
  }
  while ( result[result.length-1] === '-' ) {
    result = result.slice(0, result.length-1);
  }
  return result.replace(/--/g, '-');
};

문자열로 변환 후 홀수인 경우에 대시를 앞뒤로 붙이고 마지막에 앞뒤를 자르고, 두개인 경우를 한개로 바꿔주고 리턴

다른 사람의 풀이

function dashatize(num) {
  return String(num)
    .replace(/([13579])/g, "-$1-")
    .replace(/--+/g, "-")
    .replace(/(^-|-$)/g, "")
}

신기한 정규식


'자료구조, 알고리즘 > Codewars 문제' 카테고리의 다른 글

Fibonacci, Tribonacci and friends ( 6 kyu )  (0) 2017.12.23
What is the growth? ( 6 kyu )  (0) 2017.12.22
Dashatize it ( 6 kyu )  (0) 2017.12.20
String average ( 6 kyu )  (0) 2017.12.19
Array Helper ( 6 kyu )  (0) 2017.12.19
Simple Fun #290: Sum Of Threes ( 6 kyu )  (0) 2017.12.18

String average ( 6 kyu )

문제

You are given a string of numbers between 0-9. Find the average of these numbers and return it as a floored whole number (ie: no decimal places) written out as a string. Eg:

“zero nine five two” -> “four”

If the string is empty or includes a number greater than 9, return “n/a”

문자로 써져있는 숫자의 평균을 문자로 리턴하는 문제

풀이

function averageString(str) {
  const num = ['zero', 'one','two','three','four','five','six','seven','eight','nine'];
  const arr = str.split(' ');
  let result = 0;
  for ( let i = 0; i < arr.length; i++ ) {
    if ( num.indexOf(arr[i]) === -1 ) return 'n/a';
    result += num.indexOf(arr[i]);
  }
  return num[parseInt(result/arr.length)];
}

num에 문자를 넣고 indexOf로 숫자를 카운트,

9보타 큰 경우는 예외처리로 n/a를 리턴하도록 함

다른 사람의 풀이

똑같음


'자료구조, 알고리즘 > Codewars 문제' 카테고리의 다른 글

What is the growth? ( 6 kyu )  (0) 2017.12.22
Dashatize it ( 6 kyu )  (0) 2017.12.20
String average ( 6 kyu )  (0) 2017.12.19
Array Helper ( 6 kyu )  (0) 2017.12.19
Simple Fun #290: Sum Of Threes ( 6 kyu )  (0) 2017.12.18
RGB To Hex Conversion ( 5 kyu )  (0) 2017.12.11

Array Helper ( 6 kyu )

문제

var numbers = [1, 2, 3, 4, 5];
numbers.square(); // must return [1, 4, 9, 16, 25]
numbers.cube(); // must return [1, 8, 27, 64, 125]
numbers.average(); // must return 3
numbers.sum(); // must return 15
numbers.even(); // must return [2, 4]
numbers.odd(); // must return [1, 3, 5]

배열의 메서드를 구현하는 문제

풀이

// TODO
Array.prototype.square = function () {
  return this.map( a => { return a*a } );
}

Array.prototype.cube = function () {
  return this.map( a => { return a*a*a } );
}

Array.prototype.sum = function () {
  return this.length === 0 ? 0 : this.reduce((a,b) => { return a+b } );
}

Array.prototype.average = function () {
  return this.length === 0 ? NaN : this.reduce((a,b) => { return a+b } )/this.length;
}

Array.prototype.even = function () {
  console.log(this)
  return this.filter( a => { return a % 2 === 0 } );
}

Array.prototype.odd = function () {
  return this.filter( a => { return a % 2 === 1 } );
}

설명이 필요없따

다른 사람의 풀이

똑같음


'자료구조, 알고리즘 > Codewars 문제' 카테고리의 다른 글

Dashatize it ( 6 kyu )  (0) 2017.12.20
String average ( 6 kyu )  (0) 2017.12.19
Array Helper ( 6 kyu )  (0) 2017.12.19
Simple Fun #290: Sum Of Threes ( 6 kyu )  (0) 2017.12.18
RGB To Hex Conversion ( 5 kyu )  (0) 2017.12.11
Checking Groups ( 6 kyu )  (0) 2017.12.11

Simple Fun #290: Sum Of Threes ( 6 kyu )

문제

Task

Given a number n, return a string representing it as a sum of distinct powers of three, or return “Impossible” if that’s not possible to achieve.

Input/Output

[input] integer n

A positive integer n.

1 ≤ n ≤ 10^16.

[output] a string

A string representing the sum of powers of three which adds up to n, or “Impossible” if there is no solution. If the solution does exist, it should be return as “3a1+3a2+ … +3^an”, where ai for 0 ≤ i ≤ n represents the corresponding exponent of the term. The terms in the string should also be sorted in descending order, meaning that higher powers should appear before the lower ones in the string (“30+31” is incorrect, whereas “31+30” is correct).

인자로 주어진 수가 3의 제곱수의 합으로 나타내질 수 있는지를 판별하는 문제

풀이

function sumOfThrees(n) {
  let str = n.toString(3), result = '';
  if ( !(str.indexOf('2') === -1) ) return 'Impossible';
  for ( let i = 0; i < str.length; i++ ) {
    if ( str[i] === '1' ) {
      result += `3^${str.length-1-i}+`
    }
  }
  return result.slice(0, result.length-1);
}

3의 제곱수임을 판별하기 위해 3진법으로 변환 후에, 2가 있으면 impossible을 리턴하고 else 경우에 각 진법의 자릿수만큼 곱한 스트링을 결과값에 더해 리턴

다른 사람의 풀이

function sumOfThrees(n) {
  var t = n.toString(3)
  return /2/.test(t) ? "Impossible"  : 
  [...t].reverse().reduce((a,v,k)=>
    (v==1) ? a.concat("3^"+k) : a, []).reverse().join('+')
}

접근은 같지만 깔끔한 풀이


'자료구조, 알고리즘 > Codewars 문제' 카테고리의 다른 글

String average ( 6 kyu )  (0) 2017.12.19
Array Helper ( 6 kyu )  (0) 2017.12.19
Simple Fun #290: Sum Of Threes ( 6 kyu )  (0) 2017.12.18
RGB To Hex Conversion ( 5 kyu )  (0) 2017.12.11
Checking Groups ( 6 kyu )  (0) 2017.12.11
Rectangle into Squares ( 6 kyu )  (0) 2017.12.11

RGB To Hex Conversion ( 5 kyu )

문제

The rgb() method is incomplete. Complete the method so that passing in RGB decimal values will result in a hexadecimal representation being returned. The valid decimal values for RGB are 0 - 255. Any (r,g,b) argument values that fall out of that range should be rounded to the closest valid value.

The following are examples of expected output values:

rgb(255, 255, 255) // returns FFFFFF
rgb(255, 255, 300) // returns FFFFFF
rgb(0,0,0) // returns 000000
rgb(148, 0, 211) // returns 9400D3

rgb를 16진법으로 변환하는 문제

풀이

function rgb(r, g, b){
  let arr = [r, g, b];
  let result = '';
  for ( let i = 0; i < 3; i++ ) {
    if ( arr[i] < 0 ) {
      result += '00';
    } else if ( arr[i] > 255 ) {
      result += 'FF';
    } else {
      if ( arr[i].toString(16).length < 2 ) {
        result += '0' + arr[i].toString(16);
      } else {
        result += arr[i].toString(16).toUpperCase();
      }
    }
  }
  return result
}

0~255 밖인 경우 예외처리를 하고

toString(16)으로 16진법으로 변환하는데 이때 숫자는 한자리로 나오기 때문에 앞에 0을 붙여주고 더해서 리턴

조건문이 많이걸려서 지저분하다

다른 사람의 풀이

function rgb(r, g, b){
  return toHex(r)+toHex(g)+toHex(b);
}

function toHex(d) {
    if(d < 0 ) {return "00";}
    if(d > 255 ) {return "FF";}
    return  ("0"+(Number(d).toString(16))).slice(-2).toUpperCase()
}

slice를 뒤에서부터하는거 똑똑한 방법인것 같음!


Checking Groups ( 6 kyu )

문제

In English and programming, groups can be made using symbols such as () and {} that change meaning. However, these groups must be closed in the correct order to maintain correct syntax.

Your job in this kata will be to make a program that checks a string for correct grouping. For instance, the following groups are done correctly:

({})
[[]()]
[{()}]

The next are done incorrectly:

{(})
([]
[])

주어진 문자열이 괄호로 완벽하게 닫혀있는지 판별하는 문제

풀이

 function groupCheck(s){
   while ( s.indexOf('()') !== -1 || s.indexOf('{}') !== -1 || s.indexOf('[]') !== -1 ) {
     if ( s.indexOf('()') !== -1 ) {
       s = s.slice(0, s.indexOf('()')) + s.slice(s.indexOf('()')+2, s.length);
     } else if ( s.indexOf('{}') !== -1 ) {
       s = s.slice(0, s.indexOf('{}')) + s.slice(s.indexOf('{}')+2, s.length);
     } else if ( s.indexOf('[]') !== -1 ) {
       s = s.slice(0, s.indexOf('[]')) + s.slice(s.indexOf('[]')+2, s.length);
     }
   }
   return (s === '')
 }

(), {}, [] 가 없을 때 까지 문자열에서 삭제해 빈 문자열이 남으면 true, 아니면 false 리턴

다른 사람의 풀이

 function groupCheck(s){
   var r = /\{\}|\[\]|\(\)/;
   while(r.test(s))
     s = s.replace(r, '');  
   return !s.length;   
 }

풀이는 비슷한데 정규식을 멋있게 쓴 것 같음


Rectangle into Squares ( 6 kyu )

문제

The drawing below gives an idea of how to cut a given “true” rectangle into squares (“true” rectangle meaning that the two dimensions are different).

alternative text

Can you translate this drawing into an algorithm?

You will be given two dimensions

a positive integer length (parameter named lng)
a positive integer width (parameter named wdth)

You will return an array with the size of each of the squares.

Shell bash returns a string.

sqInRect(5, 3) should return [3, 2, 1, 1]
sqInRect(3, 5) should return [3, 2, 1, 1]

너비와 높이가 주어지면 안에 들어갈 수 있는 정사각형의 변의 길이를 배열로 담아 리턴

풀이

function sqInRect(lng, wdth){
  if ( lng === wdth ) return null;
  let result = [];
  while ( lng > 0 && wdth > 0 ) {
    if ( lng > wdth ) {
      result.push(wdth);
      lng = lng - wdth;
    } else {
      result.push(lng);
      wdth = wdth - lng
    }
  }
  return result;
}

lng, wdth중 큰 값에서 작은값을 빼면서 결과에 추가하는 방법으로 반복

다른 사람의 풀이

function sqInRect(lng, wdth){
  let arr = []
  if(lng === wdth) return null
  while(lng > 0 && wdth > 0){
    arr.push(lng > wdth ? wdth : lng)
    lng > wdth ? lng -= wdth : wdth -= lng
  }
  return arr
}

똑같이 풀었는데 삼항 연산자를 잘 사용한 풀이


'자료구조, 알고리즘 > Codewars 문제' 카테고리의 다른 글

RGB To Hex Conversion ( 5 kyu )  (0) 2017.12.11
Checking Groups ( 6 kyu )  (0) 2017.12.11
Rectangle into Squares ( 6 kyu )  (0) 2017.12.11
Does my number look big in this? ( 6 kyu )  (0) 2017.12.11
Triangle type ( 6 kyu )  (0) 2017.12.09
Pete, the baker ( 5 kyu )  (0) 2017.12.09

Does my number look big in this? ( 6 kyu )

문제

A Narcissistic Number is a number which is the sum of its own digits, each raised to the power of the number of digits.

For example, take 153 (3 digits):

1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153

and 1634 (4 digits):

1^4 + 6^4 + 3^4 + 4^4 = 1 + 1296 + 81 + 256 = 1634

Narcissistic Number를 판별하는 문제

풀이

function narcissistic( value ) {
  let str = value.toString(), len = str.length, sum = 0;
  for ( let i = 0; i < len; i++ ) {
    sum += Math.pow(str[i], len)
  }
  return sum === value ? true : false;
}

str에 문자열로 담아 각 자릿수를 len만큼 제곱해서 sum에 합쳐 value와 비교후 결과값 리턴

다른 사람의 풀이

function narcissistic( value ) {
  return ('' + value).split('').reduce(function(p, c){
    return p + Math.pow(c, ('' + value).length)
    }, 0) == value;
}

toString이 아니라 ‘’을 더해서 문자열로 만드는 방법은 신기하네


Triangle type ( 6 kyu )

문제

In this kata, you should calculate type of triangle with three given sides a, b and c (given in any order).

If all angles are less than 90°, this triangle is acute and function should return 1.

If one angle is strictly 90°, this triangle is right and function should return 2.

If one angle more than 90°, this triangle is obtuse and function should return 3.

If three sides cannot form triangle, or one angle is 180° (which turns triangle into segment) - function should return 0.

Input parameters are sides of given triangle. All input values are non-negative floating point or integer numbers (or both).

Examples:

triangleType(2, 4, 6); // return 0 (Not triangle)
triangleType(8, 5, 7); // return 1 (Acute, angles are approx. 82°, 38° and 60°)
triangleType(3, 4, 5); // return 2 (Right, angles are approx. 37°, 53° and exactly 90°)
triangleType(7, 12, 8); // return 3 (Obtuse, angles are approx. 34°, 106° and 40°)

삼각형이 되는지 여부와 된다면 어떤 삼각형인지 구하는 문제

풀이

function triangleType(a, b, c){
  let arr = [a, b, c].sort((a,b) => { return b-a });
  if ( arr[0] >= arr[1] + arr[2] ) return 0;
  if ( arr[0]*arr[0] < arr[1]*arr[1] + arr[2]*arr[2] ) {
    return 1
  } else if ( arr[0]*arr[0] === arr[1]*arr[1] + arr[2]*arr[2] ) {
    return 2 
  } else {
    return 3
  }  
}

삼각형이 되는지 가려낸 뒤에, 모양에 따라 if문으로 리턴

다른 사람의 풀이

똑같당


+ Recent posts