인프런 커뮤니티 질문&답변

00님의 프로필 이미지
00

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

7. 아나그램(Hash Map)

map 을 두개 만들기

작성

·

174

0

제가 강의 듣기전에 미리 풀어봤는데

선생님 코드와 다르게 저의 경우

function solution(str1, str2) {
  let answer = "YES",
    m1 = new Map(),
    m2 = new Map();
  for (let i = 0; i < str1.length; i++) {
    m1.has(str1[i]) ? m1.set(str1[i], m1.get(str1[i]) + 1) : m1.set(str1[i], 1);
    m2.has(str2[i]) ? m2.set(str2[i], m2.get(str2[i]) + 1) : m2.set(str2[i], 1);
  }
  for (let [key, value] of m1) {
    if (!m2.has(key)) return "NO";
    if (m2.get(key) !== value) return "NO";
  }
  return answer;
}

str1 , str2 각각 map으로 만든뒤 for문 돌려서 비교했는데 이렇게 풀면 메모리 낭비가 심한 풀이일까요 ?

 

근데 그다음 영상 '모든 아나그램 찾기' 문제에션 두 문자를 map으로 변형한뒤 비교한 것 같은데, 어떤 상황일 때 어떤 풀이 방법을 선택해야하는지 알수있을까요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

00님, 다른 방법으로 문제를 접근하신 것은 매우 좋은 시도입니다.

두 개의 Map을 사용하는 방법은 입력 문자열의 길이에 비례하는 공간을 필요로 합니다. 각 문자에 대한 빈도수를 저장하기 때문에, 메모리 사용량은 입력 문자열의 크기와 연관이 있죠. 대부분의 경우 이 정도 메모리 사용은 큰 문제가 되지 않으나, 입력 데이터의 크기가 매우 클 경우에는 한 번 생각해볼 필요가 있습니다.

선택한 풀이 방법은 문제의 요구 사항과 제약 조건, 그리고 풀이의 목적에 따라 달라질 수 있습니다. 예를 들어, 실행 시간이 중요한 상황에서는 더 효율적인 시간 복잡도를 가진 풀이를 선택할 필요가 있습니다. 반면, 코드의 가독성이나 유지보수성을 더 중요시하는 상황이라면, 약간 비효율적이더라도 이해하기 쉬운 코드를 선택할 수 있습니다.

‘모든 아나그램 찾기’ 문제에서 map을 사용한 것은 두 문자열이 서로 아나그램인지를 효과적으로 비교하기 위해서입니다. 아나그램 비교는 각 문자의 빈도수가 일치하는지를 확인하는 것이고, 이를 위해 map을 사용하는 것은 자연스러운 접근법이에요.

다시 말해, 어떤 풀이 방법을 선택할지는 그 문제가 어떤 종류의 작업을 요구하는지, 데이터의 크기가 어느 정도인지, 그리고 어떤 부분을 최적화하고 싶은지(시간, 공간, 가독성 등)에 따라 결정됩니다.

코드가 메모리를 낭비한다고 느낄 땐, 같은 작업을 수행하되 더 적은 스토리지를 사용하는 방법을 찾아보는 것도 좋습니다. 예를 들어, 하나의 map만 사용하고 문자열을 정렬하여 비교하는 방법 등이 있겠죠. 하지만 항상 ‘최적’은 상황에 따라 다르므로, 문제의 유형과 요구 사항에 따라 적절한 접근 방식을 선택하시는 것이 중요합니다.

00님의 프로필 이미지
00

작성한 질문수

질문하기