Digital rootis therecursive sum of all the digits in a number.
got it, 나 이거 알아
Givenn, take the sum of the digits ofn. 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을 받으면, 각 자리수의 합을 구하게한다구나. 일단, 기본적으로 양의 정수를 받아야하고.. 알겠어
다른 분의 도움을 받아서 이 코딩에 문제는 Int에 Character을 받는 생성자가 없다라는 것이라고 하셨어........
생성자(Constructor) 역할 객체를 생성할 때 항상 실행되는 것으로, 객체를 초기화해주기 위해 맨 처음 실행되는 메소드이다.
나는 String -> Character -> Int 를 시도 하려고 했으나, 잘 안되었어. 그래서, 다시 도움을 받아서 새로운 코드를 알게 되었어.
설명을 하면, String()으로 형변환을 하는 거야. 그런다음 compactMap()을 사용하여 16진수로 바꾸고 정렬하는 거야. 그런다음 reduce()를 사용하여 초기값 0부터 1씩 추가하여 더하는 거얌 그러면 sum이라는 값에 대입하면 90% 완성이야. 이제 이걸 한 번 더해줘야해.
왜냐하면, 456같은 경우는 한번 하면, 15가 되잖아. 이러면 안되서 한번 더하면 6!!!! 완성!!!!!!!
이 밖에도 이러한 방법이 있으시데😊😊 다음주 중에 할일 다하면 해보자!!! 오늘도 많이 배운것 같아서 너무 행복😊😊😊😊
Giventhree integersa,b,c,returnthelargest numberobtained 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개!!!😊😊😊😊😊😊
주의점!
Youcannot swap the operands.
위에 말한 것처럼, 개괄적으로 개념을 잡았으니 이제 제대로 생각을 해보면, 위에 경우의 수를 모두 가지고 있는 배열을 선언하고 각각의 해당하는 배열에 대입을 해줍니다. 그리고 각 인덱스의 값과 LargestNumber와 비교하여 만약, 각 인덱스 값이 크다면, LargeNumber에 대입을 해줍니다. 그러면 완성!!
라고 생각했지만, ㅠㅠ 제가 for의 indext범위를 애매하게 설정해주어서 그런가 for i in arrary{} 이 구문을 사용할려고 했지만, 실패했군요... 구글링을 해보니깐, 0..<array.count를 사용하라고 하더라구요.. 혹시, 이 이유를 아시는 분이 있다면, 댓글달아주세요ㅜㅜㅜ
그리고 하나하나 대입하는것보다는 배열에다가 직접 들어가 볼까여??
결론
성공했습니다!!!!☺️☺️😊☺️☺️😊☺️☺️☺️ 지금 어엿 알고리즘 문제를 푼지 2일째 되는데, 시간 복잡도와 같은 Academic 적인 알고리즘을 공부를 하고 practical programming을 하는 것이 아니라 부족 할 수 는 있지만, 아.....! 작년에 조금 했군여 그래도 스스로 뿌듯하고 재미있네여!!!!
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분 정도 소비함... 자꾸 알고리즘이 실패해서...