안녕하세요.
이번 시리즈에서는 Codewars의 도전 과제와 저의 사고 과정을 포스팅하고 있습니다. 가능할 때마다 JS와 Node 18을 사용하고 있습니다. 명확성을 위해 공정하게 사용하고 있습니다.
'중복 횟수 계산' 챌린지는 다음과 같이 시작하겠습니다.
function duplicateCount(text){ text = text.toString(); let countTotal = {"max":0}; let letter = ''; for (let i=0 ; i < text.length ; i++){ letter = text.at(i).toLowerCase(); if (letter){ countTotal[letter] = countTotal[letter] ? countTotal[letter]++ : 1; if (countTotal[letter] > countTotal["max"]){ countTotal["max"] = countTotal[letter]; } } } return countTotal["max"]; }
말이... 장황한 것 같네요. 이 많은 말이 실제로 올바른 방향을 향하고 있는지 궁금합니다. 스스로 생각해 보실 수 있도록 잠시 시간을 드리겠습니다.
3...
2...
1...
1/2...
1/4...
그렇습니다. 이 정도면 충분하다고 생각합니다. 아니요. Bay Area의 속어가 웹에 등장했으니 엄청 틀렸어요
중복된 편지가장 많이 중복된 편지가 몇 개나 있는지 알아보고 있었습니다. 중복된 유형이 몇 개 있는지 답해야 합니다. 대소문자를 구분하지 않습니다.
AbC -> 0 -> 문자가 반복되지 않습니다
AbCC -> 1 -> "C"가 반복됩니다. 몇 번이든 상관없습니다
AbBCC -> 2 -> "b"와 "c"가 반복됩니다. 몇 번이나 대소문자는 상관하지 않습니다
JS의 객체 리터럴을 활용하여 각 문자에 대한 카운터를 만들 수 있습니다. 그러면 한 가지 속성은 "반복"이 될 수 있는데, 이는 문자가 두 번 나타날 때마다 올라가는 카운터가 될 것입니다.
if (countTotal[letter]==2){ countTotal.repetitions++; }
전체 솔루션:
function duplicateCount(text){ text = text.toString(); let countTotal = {"repetitions": 0}; let letter = ''; for (let i=0 ; i < text.length ; i++){ letter = text.at(i).toLowerCase(); if (letter){ (countTotal[letter] === undefined) ? countTotal[letter] = 0 : null; countTotal[letter]++; if (countTotal[letter]==2){ countTotal.repetitions++; } } } return countTotal["repetitions"]; }
시간이 좀 걸렸지만 개선될 수 있습니다.
조심하세요. 물을 마셔요???.
이전
위 내용은 Codewars - 중복 계산의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!