서론

😊😊😊

화이팅

본론

Very simple, given a number, find its opposite.

숫자를 받으면, 반대로 출력하래 ㅇㅋ

Examples:

1: -1 14: -14 -34: 34

 

결론

 

'Algorithm > CodeWars' 카테고리의 다른 글

String repeat by CodeWar  (0) 2021.04.03
Calculate BMI  (0) 2021.04.02
Sum of positive by CodeWar  (0) 2021.03.30
Even or Odd  (0) 2021.03.29
Sum of Digits / Digital Root  (0) 2021.03.28

서론 

오늘도 화이팅하자구😊😊😊

본론

Sum of positive

 

You get an array of numbers, return the sum of all of the positives ones.

배열을 받을 것이고 양의 정수들만 더해라. 이거네😊😊

Example [1,-4,7,12] => 1 + 7 + 12 = 20

Note: if there is nothing to sum, the sum is default to 0.

더할게 없으면 0, 

어제부터 쉬운 문제만 걸리네😢😢😢

결론

sum을 활용 하여, 배열을 다 더하도록 하면 됨. sumOfPositivies의  numbers 인수는 let이라고 생각하면됨.

그래서!!! newnumbers를 새롭게 정의하여서  numbers의 음의 정수는 0으로 만들어 버리고 newnumbers에 다 대입 한당. 

by using append()!!  그리고 이제!!!!!!!!!!!!!!!!!!☺️☺️😊☺️☺️☺️☺️☺️

새로 만든 배열을 reduce함수를 활용하여, 0 부터 차례대로 더하시오!! 하면 완성.

주말마다, 다른 분들이 짠 코드를 다시한번 보면서 공부해보자.!!

 

'Algorithm > CodeWars' 카테고리의 다른 글

Calculate BMI  (0) 2021.04.02
Opposite number  (0) 2021.03.31
Even or Odd  (0) 2021.03.29
Sum of Digits / Digital Root  (0) 2021.03.28
Expressions Matter  (0) 2021.03.27

서론

오늘도 신나게 풀어보자😊😊😊😊

본론

Create a function (or write a script in Shell) that takes an integer as an argument and returns "Even" for even numbers or "Odd" for odd numbers.

 

함수를 만들래, 어떤 함수냐면 정수를 인수로 받고 짝수 값이면 짝수를 홀수 값이면 홀수를 return

쉬운 문제군 ㅎㅎ

일단, if함수를 사용해보자, 그리고 2를 나누었을때에, 나머지가 0이니깐, 짝수!!!😊😊

나머지는 홀수!! 아 그리고 여기서는 0도 짝수로 취급을 함...!!

결론

 

'Algorithm > CodeWars' 카테고리의 다른 글

Opposite number  (0) 2021.03.31
Sum of positive by CodeWar  (0) 2021.03.30
Sum of Digits / Digital Root  (0) 2021.03.28
Expressions Matter  (0) 2021.03.27
Roman numerals encoder By Codewars  (0) 2021.03.27

서론 

비록, 3일째지만 실력이 늘어남을 느끼고 있다. 오늘 신나게 풀어보자.

본론

Digital root is the recursive sum of all the digits in a number.

got it, 나 이거 알아 

Given n, take the sum of the digits of n. If that value has more than one digit, continue reducing in this way until a single-digit number is produced. The input will be a non-negative integer.

N을 받으면, 각 자리수의 합을 구하게한다구나. 일단, 기본적으로 양의 정수를 받아야하고.. 알겠어

Examples

16 --> 1 + 6 = 7 942 --> 9 + 4 + 2 = 15 --> 1 + 5 = 6

132189 --> 1 + 3 + 2 + 1 + 8 + 9 = 24 --> 2 + 4 = 6

493193 --> 4 + 9 + 3 + 1 + 9 + 3 = 29 --> 2 + 9 = 11 --> 1 + 1 = 2

결론

난 아래와 같이 코딩을 했어.

 

func digitalRoot(of number: Int){

 let number = String(number)

 Var sum : Int = 0 

 

 for i in number{

 

      Sum +=  Int(i)

 }

 return sum

}

 

digitalRoot(of: 456)

 

근데.. 에러가 생겼어.....ㅜㅜ 

다른 분의 도움을 받아서 이 코딩에 문제는 Int에 Character을 받는 생성자가 없다라는 것이라고 하셨어........ 

 생성자(Constructor) 역할 객체를 생성할 때 항상 실행되는 것으로, 객체를 초기화해주기 위해 맨 처음 실행되는 메소드이다.

나는 String -> Character -> Int 를 시도 하려고 했으나, 잘 안되었어. 그래서, 다시 도움을 받아서 새로운 코드를 알게 되었어.  

 

 설명을 하면, String()으로 형변환을 하는 거야. 그런다음 compactMap()을 사용하여 16진수로 바꾸고 정렬하는 거야. 그런다음 reduce()를 사용하여 초기값 0부터 1씩 추가하여 더하는 거얌 그러면 sum이라는 값에 대입하면 90% 완성이야. 이제 이걸 한 번 더해줘야해.

왜냐하면, 456같은 경우는 한번 하면, 15가 되잖아. 이러면 안되서 한번 더하면 6!!!! 완성!!!!!!!

 

 

이 밖에도 이러한 방법이 있으시데😊😊 다음주 중에 할일 다하면 해보자!!! 오늘도 많이 배운것 같아서 너무 행복😊😊😊😊

1.Character->String->Int?

2.UnicodeScalar나 asciivalue 프로퍼티를 사용

 

 

'Algorithm > CodeWars' 카테고리의 다른 글

Sum of positive by CodeWar  (0) 2021.03.30
Even or Odd  (0) 2021.03.29
Expressions Matter  (0) 2021.03.27
Roman numerals encoder By Codewars  (0) 2021.03.27
Multiple of 3 or 5 By CodeWars  (0) 2021.03.26

서론

안녕하세용. 구루구루입니다. 오늘도  Codewar에 있는 것을 해결해 볼까요??

 

본론

Task

  • Given three integers a ,b ,c, return the largest number obtained after inserting the following operators and brackets: +, *, ()
  • In other words , try every combination of a,b,c with [*+()] , and return the Maximum Obtained

a,b,c가 주어지면, +,*,() 를 활용하여 가장 높은 값을 반출하는 문제이에여!!!!(연산자의 중복이 가능하답니다.)

 

흠, 생각을 해볼까요??

일단, a,b,c,를 받습니당.

a _  b _ c 이기 때문에 경우의 수를 활용하여  + 와 * 는  앞에 빈칸과 뒤에 빈칸에 들어갈 수 있습니당.

그러면 2 * 2면 4가지 경우의 수가 있는데, 괄호 까지 생각하면 연산자가 같으면 괄호가 있어도 영향이 없으니깐, 연산자가 다를 경우를 생각하면, 앞에 뒤에 하나 해서 2가지 이에여.

그래서 총, 경우의 수는 6개!!!😊😊😊😊😊😊

주의점!

You cannot swap the operands.

 

 

 위에 말한 것처럼, 개괄적으로 개념을 잡았으니 이제 제대로 생각을 해보면, 위에 경우의 수를 모두 가지고 있는 배열을 선언하고 각각의 해당하는 배열에 대입을 해줍니다. 그리고 각 인덱스의 값과 LargestNumber와 비교하여 만약, 각 인덱스 값이 크다면, LargeNumber에 대입을 해줍니다. 그러면 완성!!

 

 

 

 

 

 

 

라고 생각했지만, ㅠㅠ 제가 for의 indext범위를 애매하게 설정해주어서 그런가 for i in arrary{} 이 구문을 사용할려고 했지만, 실패했군요... 구글링을 해보니깐, 0..<array.count를 사용하라고 하더라구요.. 혹시, 이 이유를 아시는 분이 있다면, 댓글달아주세요ㅜㅜㅜ

그리고 하나하나 대입하는것보다는 배열에다가 직접 들어가 볼까여?? 

 

 

결론

성공했습니다!!!!☺️☺️😊☺️☺️😊☺️☺️☺️ 지금  어엿 알고리즘 문제를 푼지 2일째 되는데, 시간 복잡도와 같은 Academic 적인 알고리즘을 공부를 하고 practical programming을 하는 것이 아니라 부족 할 수 는 있지만, 아.....! 작년에 조금 했군여 그래도 스스로 뿌듯하고 재미있네여!!!!

다른 분의 풀이

max()함수라는 게 있다니... 하나 배웠네!!☺️☺️

 

func expressionMatter(_ a: Int, _ b: Int, _ c: Int) -> Int { return max(a + b + c, (a + b) * c, a * (b + c), a * b * c) }

 

by tllong, tuor713, YoavKisel, PetrVoid, aymil, Tammy.He, agapkinadianaa

 

Codewars: Achieve mastery through challenge

Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest potential.

www.codewars.com

 

 

'Algorithm > CodeWars' 카테고리의 다른 글

Sum of positive by CodeWar  (0) 2021.03.30
Even or Odd  (0) 2021.03.29
Sum of Digits / Digital Root  (0) 2021.03.28
Roman numerals encoder By Codewars  (0) 2021.03.27
Multiple of 3 or 5 By CodeWars  (0) 2021.03.26

서론

대학교 원서에서 많이 본 기호다. 이번 기회에 제대로 공부해 보자!!👍☺️

본론 

ok, 문제를 읽어 보자.

Create a function taking a positive integer as its parameter and returning a string containing the Roman Numeral representation of that integer.

함수를 만들어라. 알았어.... 그것의 역활은 정수(양의 정수)를 받아라 그것의 인수로써 그리고 로마 기호를 포함하는 문자열을 반환해라.

ok

Modern Roman numerals are written by expressing each digit separately starting with the left most digit and skipping any digit with a value of zero.

ok

In Roman numerals 1990 is rendered: 1000=M, 900=CM, 90=XC; resulting in MCMXC. 2008 is written as 2000=MM, 8=VIII; or MMVIII. 1666 uses each Roman symbol in descending order: MDCLXVI.

ok got it, 근데 솔직히 이 예시로는 이해가 잘안됨. 구글링 해보자.

 

보니깐, I는 1인것 같고 4부터 이상하네, V는 5인 것같고 그러면 I가 V보다 앞에 있을때는 빼네, 6부터는 더하네, 9 같은 경우도 I가 앞에 있을때에, 빼네. Ok 두번 확인했음. 

결론적으로, I가 앞에 있을 때에는 빼네....!!! 이걸 어떻게 구현하지?

음...... 4,9,14,19....를 조심하면 되는데, IV,IX,XIV,XIX....인데, 그런 생각이 드네, 

 

만약, IV라는 문자열을 받았을때, 첫번재 문자가 두번째 문자보다 작아, 그럴때 뺀다. 라고 생각해도 되겠네...  그러면,,,,,,,,,,,

Dictionary를 사용하여  로마 기호를 집단으로 만들고 싶었지만, 이 것은 순서가 정해져 있지 않기 때문에 인덱스로 접근하기가 힘들것같아...그러면 set도 Dictionary랑 비슷 할 것 같아. 그러면, array를 사용해서 문제를 해결하는 방법이 있을까?

그러면,  I , IV, V, IX들을 각각 하나의 문자로 생각을 해보자. 저 문자가 나왔을 때, 하나의 숫자로 인식으로 하는 거야. 이거면 괜찮을 꺼같은데?? 해보자

 

결론

roman과  arabic을 선언함.

출력 할 roman 문자열을 초기함. 그리고 해당 문자에 해당하는 값을 나누었을때, 몫이 생기면 for문으로 가고 for문이 끝나면 startingValue을 감소 시킴으로써 문제를 해결... 이건 구글링에 도움을 받았는데, 세상에 천재가 정말 많은듯. 

더 노력하자...!!

여기서 내가 했던 실수는 /을 나누기가 아니고 나머지로 생각했다는 거 이것때문에 시간 40분 정도 소비함... 자꾸 알고리즘이 실패해서...

console 화면

'Algorithm > CodeWars' 카테고리의 다른 글

Sum of positive by CodeWar  (0) 2021.03.30
Even or Odd  (0) 2021.03.29
Sum of Digits / Digital Root  (0) 2021.03.28
Expressions Matter  (0) 2021.03.27
Multiple of 3 or 5 By CodeWars  (0) 2021.03.26

서론

오늘 처음으로, Algorithm문제를 풀어보는데, 재미가 있네여ㅎㅎ

 

일단, 문제부터 확인을 해볼까 합니다.

핵심적으로 무엇을 물어보냐, 뭐가 궁금한지 말이죠

 

본론

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9.

배경지식을 설명합니다. 우리는 3과 5의 배수중 10미만의 수는 3,6,9, 그리고 5,10이 있습니다. 

The sum of these multiples is 23.

위를 다 더하면, 23이죠? 

Finish the solution so that it returns the sum of all the multiples of 3 or 5 below the number passed in.

결국은 sum을 구하라네여. 3과 5가 나타난다면, 더하라. 이런 느낌입니다. 나머지느 무시하고.

Note: If the number is a multiple of both 3 and 5, only count it once.

이 문장을 읽다가, 문득 || 이것을 사용해야겠다고 느꼈습니다. 뭔가 깔끔하게 코딩을 할 수 있을 것이라 생각이 들었거든요,

 

 

저는 스위프트 구루가 되기 위해서, 스위프트 언어를 주로 사용할껍니당 

 

 

결론

Solution

 

 

긴설명 죄송해요ㅜㅜ 

num이 일단 음수일 가능성도 있으니깐, 첫문장부터 걸러줍니다.

그런다음, for 문을 사용!! i 라는 index를 반복 변수로 사용!!

그리고 입력 받은 num을 범위로 설정!!

그리고  3과 5로 나누어 떨어지면 이것들의 배수임으로, 이때마다

i를 sum 에 중첩 시켜주세여 

그리고 만약 이에 해당하지 않는다. 하면, coutinue를 활용! 하여 1을 더한 다음 인덱스 값으로 넘어가게 합니다.

마지막으로!!! 정말 중요한 return을 sum값을 해줍니다.

그러면 완성!!!

 

 

 

문제

What????

Test는 성공했지만, 제출이 실패했네요...??

왤까여??ㅜㅜ  에러 메세지를 읽어보니깐 스위프트 loop 문에서 ..< 를 사용하면 에러가 생긴데여.??? 

그래서 해결책을 찾아 봤어여 그래서 어떤 분이

loop failing with error "Can't form range with end < start"  이란 질문에

Swift 5

If you need a loop with dynamic value-range, I suggest that using stride(to:by:) instead of ..<or ...

 

이렇게 답장을 주셨더라구요. 결론은 제가 dynamic value-range를 사용하였고 이것이 문제가 되었나 봅니다.

그래서,  stride()함수를 사용하였고 성공하여 제출하게 되었습니당.

 

어떤분의 solution

와 진짜 깔끔하다.... 배운 걸 활용한다는 것을 알게 된것같아여

filter(), reduce()사용법도 알게 되어 좋았어여 굿굿

 

func solution(_ num: Int) -> Int { return (0..<num).filter { ($0 % 3 * $0 % 5) == 0 }.reduce(0, +) }

 

 

 

 

'Algorithm > CodeWars' 카테고리의 다른 글

Sum of positive by CodeWar  (0) 2021.03.30
Even or Odd  (0) 2021.03.29
Sum of Digits / Digital Root  (0) 2021.03.28
Expressions Matter  (0) 2021.03.27
Roman numerals encoder By Codewars  (0) 2021.03.27

+ Recent posts