본문 바로가기
알고리즘/CodeWars

[CodeWars] javascript - 7kyu - Largest 5 digit number in a series 문제풀이

by TLOWAC 2020. 4. 24.

Title

Largest 5 digit number in a series

Description

Description:
In the following 6 digit number:

283910

91 is the greatest sequence of 2 consecutive digits.

In the following 10 digit number:

1234567890

67890 is the greatest sequence of 5 consecutive digits.

Complete the solution so that it returns the greatest sequence of five consecutive digits found within the number given. The number will be passed in as a string of only digits. It should return a five digit integer. The number passed may be as large as 1000 digits.


How Can I Solved

문제 요구사항 정의

함수 원형 : function solution( digits ) { ... }

solution 함수의 인자는 digits 이다.
digits는 나열된 숫자의 값이다.

다만, 그값이 조금 길다.

731671765313306249192251196744265747423553491949349698352036854250632623957831801698480186947885184385861560789112949495459501737958331952
8532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766
1428280644448664523874930358907296290491560440772390713810515859307960866701724271218839987979087922749219016997208880937766572733300105336
7881220235421809751254540594752243525849077116705560136048395864467063244157221553975312345797784617406495514929086256932197846862248283972
2413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162
8245861786645835912456652947654568284891288314260769004224219022671055626321111109370544217506941658960408071984038509624554443629812309878
7992724428490918884580156166097919133875499200524063689912560717606058861164671094050775410022569831552000559357297257163626956188267042825
2483600823257540920752963450

나열된 숫자 값 중에서, 연속된 5개의 숫자값이 가장 큰 경우를 찾는다.

그리고, 연속된 5개의 숫자값이 가장 큰 값을 반환한다.


문제 접근

예시 중에서 "연속된 2개의 숫자값"이 있어서 풀이 초반에 많이 해맸다.
결론적으로 구해야 되는것은 "연속된 5개의 숫자값이 가장 큰 값" 이다.
( 문제의 또 다른 예시인, 연속된 2개의 숫자값은 신경쓰지 않아도 된다. )

전체적인 로직은 최대값 구하기와 유사하다.

하지만, 한가지 추가된 점이 있다.
비교값을 digits 에서 5자리씩 뽑아서 비교해야 한다.

숫자의 길이 만큼

나열된 숫자값 안에서 5개씩 처음 부터 끝까지 반복해야 한다.
아래와 같이 for문을 사용해서 반복한다.

for(var i=0;i<digits.length;i++)

연속된 5개의 숫자값 구하기

slice( start, end )를 사용해서 digits로 부터 5자리씩 값을 가져온다.
가져온 값은 compareVal 변수에 저장한다.

compareVal = digits.slice(i,i+5)

값 비교하기

compareVal 와 answer을 비교한다.
compareVal의 값이 더 큰 경우, answer값을 compareVal 값으로 초기화 한다.

if(answer < compareVal)
answer = compareVal

형변환

속된 5개의 숫자값 중에서 가장 큰 값이 answer에 담겨져 있다.
문자형 변수를 정수형 변수로 형변환 하기 위해 앞에 +를 붙여 준다.

return +answer

Solution

function solution(digits){
  var answer=0
  var compareVal=0

  for(var i=0;i<digits.length;i++){
    compareVal = digits.slice(i,i+5)
    if(answer < compareVal)
      answer = compareVal
  }
  return +answer
}

댓글