재미있는 JavaScript 인터뷰 챌린지

안녕 모두들! Code Review에 다시 오신 것을 환영합니다. Dev.to에서만 매주 공개되는 일련의 코딩 인터뷰 챌린지 및 경력 관련 콘텐츠입니다. 저는 Elisabeth Gross이고 모든 수준의 개발자가 다음 엔지니어링 작업을 할 수 있도록 돕는 전용 사이트인 제가 하는 일Coderbyte에서 저를 알고 계실 것입니다. 또는 다음 큰 인터뷰를 준비하면서 이 시리즈를 따라갈 수도 있습니다!

이 시리즈를 작성하면서 제가 가장 좋아하는 부분은 코딩 기술을 레벨업하는 데 열정을 가지고 있는 추진력 있고 흥분된 개발자 커뮤니티로서 여러분 모두를 알게 된 것입니다. 개발자 라이프스타일 콘텐츠와 함께 더 많은 팁과 요령을 원하시면 Instagram @elisabethgross568에서 저를 팔로우하세요. 저는 NYC에서 일하기 좋아하는 커피숍, 코딩하는 동안 가장 좋아하는 재생 목록 및 기타 많은 재미있는 것들에 대해 게시할 것입니다! 나는 당신과 더 이상 참여하기를 기다릴 수 없습니다. 알겠습니다. 잡담은 그만하세요. 지난주 챌린지에 대한 솔루션으로 바로 넘어가겠습니다.

해결책



이 솔루션은 아나그램이 순서는 다르지만 서로 동일한 문자 빈도를 갖는다는 사실을 활용합니다. 객체를 사용하여 각 문자열에 어떤 문자가 있고 얼마나 자주 나타나는지 저장할 수 있습니다. 두 문자열의 문자 빈도가 동일하면 애너그램이 있습니다! 코드에서 다음과 같이 표시됩니다.

function anagram(str1, str2) {
  // replace all whitespace characters
  const arr1 = str1.toLowerCase().replace(/\s+/g, '').split('')
  const arr2 = str2.toLowerCase().replace(/\s+/g, '').split('')

  const obj = {}
  arr1.forEach(letter => {
    if (!obj[letter]) obj[letter] = 0
    obj[letter]++
  })
  arr2.forEach(letter => {
    if (!obj[letter]) return false
    else obj[letter]--
  })
  for (var letter in obj) {
    if (obj[letter] !== 0) return false
  }
  return true
}

시간 복잡도



이 솔루션의 시간 복잡도는 O(n)입니다. 문자 빈도를 추적하는 개체를 빌드하기 위해 각 문자열을 한 번만 통과하면 되기 때문입니다. 종종 객체를 사용하여 알고리즘의 시간 복잡성을 줄이는 좋은 방법으로 무언가를 추적할 수 있습니다. 키와 값을 가져오고 설정하는 데 O(1) 의 시간 복잡도가 있기 때문에 객체를 사용하는 비용이 저렴합니다.

이번주 챌린지



당신은 절실히 필요한 평화와 고요함을 위해 도시를 벗어나 숲으로 이사하기로 결정한 프로그래머입니다. 일반적으로 지역 우물에서 물을 가져오지만 물이 말라버린 것 같습니다. 빗물을 모아 여과하기로 결정했지만 수집 장치가 평평하지 않습니다. 각 막대의 너비가 1인 고도 지도를 나타내는 음이 아닌 정수n가 주어졌을 때 한 번에 모을 수 있는 비의 양을 결정하는 알고리즘을 작성하십시오.

예: 주어진 [0,3,0,1,0,0,0,1,0,2] return 12

이는 다음과 같이 시각화할 수 있습니다.



즐기다!

뉴스레터 📫



우리는 큰 것을 출시할 때마다 작은 기능 공개 스니펫을 보내므로 우리 커뮤니티는 새로운 것을 출시할 때 가장 먼저 알게 됩니다. Give us your email here "첫 번째 정보"목록에 추가하겠습니다 :)

독점 Coderbyte 프로모션



그리고 멋진 Dev.to 커뮤니티에 대한 감사의 의미로 독자들에게 특별 프로모션을 제공하고 싶습니다. this secret checkout page에서 구독 및 일회성 결제 30% 할인을 확인하세요.

좋은 웹페이지 즐겨찾기