44화 - 부모님 어디계세요!?(울음) - Codewars Kata (6규)

어떻게 도와드릴까요?
You can support by buying a coffee ☕️
Follow me on Github

지침



어머니들은 학교에서 아이들을 위해 댄스 파티를 준비했습니다. 그 파티에는 엄마와 아이들만 있었다. 갑자기 모든 불이 꺼졌을 때 모두가 댄스 플로어에서 즐거운 시간을 보내고 있습니다. 어두운 밤이고 아무도 서로를 볼 수 없습니다. 하지만 당신은 근처를 날고 있었고 어둠 속에서도 볼 수 있고 원하는 곳으로 사람들을 텔레포트할 수 있습니다.

전설:
-대문자는 어머니를, 소문자는 자녀를 나타냅니다. 즉, "A"어머니의 자녀는 "aaaa"입니다.
-함수 입력: 문자열은 문자만 포함하고 대문자는 고유합니다.

일:
어머니 다음에 자녀가 오는 알파벳 순서로 모든 사람을 배치합니다(예: "aAbaBb"=> "AaaBbb").

내 솔루션:



function findChildren(str) {
  str = str.toLowerCase()
//   beeeebb
  let arr = str.split('')
//   [ 'b', 'e', 'e', 'e', 'e', 'b', 'b' ]
  var r = '';
  let letters = [...new Set(arr)].sort()
//   ['b','e']

  for(let i = 0; i<letters.length; i++){
//     Will iterate ['b','e']
    for(let j = 0; j<str.length; j++){
//       Will iterate //   [ 'b', 'e', 'e', 'e', 'e', 'b', 'b' ]
      if(letters[i] == arr[j]) r += arr[j]
    }
  }
  return r.split('').map((x,i)=> x !== r[i-1] ? x = x.toUpperCase() : x ).join('')
//   in the map, if the actual letter isn't the same as the last one it'll make it upperCase becuase it is the first one of those group
}


설명



먼저 문자열을 소문자로 변환한 다음 배열로 분할하고 결과를 저장하기 위해 빈 문자열로 변수 "r"을 만들었습니다.

  str = str.toLowerCase()
//   beeeebb
  let arr = str.split('')
//   [ 'b', 'e', 'e', 'e', 'e', 'b', 'b' ]
  var r = '';



그런 다음 "문자"라는 변수를 만들었습니다. 배열에 포함된 문자를 가져올 수 있도록 문자가 포함된 배열에 새 Set()를 사용한 다음 알파벳 순서로 가져올 수 있도록 정렬했습니다.

    let letters = [...new Set(arr)].sort()
//   ['b','e']



그런 다음 2개의 for 루프를 사용했습니다. 첫 번째 루프는 문자열에 포함된 그룹화되지 않은 문자를 반복하는 것이고 두 번째 루프는 문자열이 혼합된 모든 문자를 반복하는 것입니다.
두 번째 루프 내에서 조건문을 사용했습니다. 그룹에 포함된 문자가 혼합 문자열에서 반복되는 문자와 같으면 "r"에 추가됩니다.

 for(let i = 0; i<letters.length; i++){
//     Will iterate ['b','e']
    for(let j = 0; j<str.length; j++){
//       Will iterate //   [ 'b', 'e', 'e', 'e', 'e', 'b', 'b' ]
      if(letters[i] == arr[j]) r += arr[j]
    }
  }



끝에서 "r"은 문자가 순서대로 나열되지만 첫 문자가 대문자가 아닌 문자열('bbbeeee')과 같으며 ('BbbEeee')이기를 원합니다.
그래서 "r"을 배열로 분할한 다음 매핑했습니다. 현재 문자가 뒤에 있는 문자와 같지 않으면 그룹의 첫 번째 문자이므로 대문자로 지정해야 합니다. 그렇지 않으면 그대로 둡니다.
그리고 이 결과를 반환합니다.

return r.split('').map((x,i)=> x !== r[i-1] ? x = x.toUpperCase() : x ).join('')
//   in the map, if the actual letter isn't the same as the last one it'll make it upperCase becuase it is the first one of those group



이 솔루션에 대해 어떻게 생각하십니까? 👇🤔
Solve this Kata 👨🏽‍💻

좋은 웹페이지 즐겨찾기