본문 바로가기

자료구조알고리즘/코드스테이츠 Coplit

16_isIsogram

[ 문제 ]

이해하기 쉬운 문제이다. 알파벳을 한번씩만 사용하여 만든 단어(아이소그램)일 경우 true, 아니라면 false를 반환시키는 문제이다.

 

여기서 주의사항은, 빈 문자열을 입력받을 경우 true를 리턴,

그리고 대소문자는 구별하지 않는다.

 

[ 풀이 ]

나의 로직은 다음과 같다.

1/ 대소문자를 구별하지 않게 하기위해, 입력받은 문자열을 소문자 또는 대문자로 통일시킨다.

2/ 이중 반복문을 이용하여 똑같은 알파벳이 있으면 false를 반환시키고,

반복문이 끝나도록 같은 알파벳이 있지 않으면 true를 반환시킨다. 

function isIsogram(str) {
  let capital = str.toUpperCase(); //먼저 입력받은 str을 대문자로 통일시킨다.
  for(let i = 0; i < capital.length-1; i++){ //이중 반복문을 이용하여 두개의 알파벳을 비교한다.
    for(let j = i+1; j < capital.length; j++){
      if(capital[i] === capital[j]){ //만약 동일한 알파벳이 있다면 false를 반환시킨다.
        return false;
      }
    }
  }
  return true; //반복문이 종료되기 전까지 함수가 종료되지않으면(동일한 알파벳이 없다면) true를 반환시킨다.
}

 

 

[ 레퍼런스 ]

function isIsogram(str) { //moOse
  if (str.length === 0) {
    return true;
  }

  let cache = {}; //{m:true, o: true}
  let strLowered = str.toLowerCase(); //moose

  for (let i = 0; i < strLowered.length; i++) {
    if (cache[strLowered[i]]) { //i === 2일때, cache['o']는 true값으로 이미 존재.
      return false; //따라서 false값 반환
    }
    cache[strLowered[i]] = true;
  }

  return true;
}

처음 레퍼런스를 봤을때는, 왜이렇게 복잡하게 풀까? 라고 생각했는데 내가 착각한것이었다..

예전에 알고리즘에서 배웠던, Memoization을 이용한 것이었다.

**Memoization : 컴퓨터 프로그램이 동일한 계산을 반복해야 할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 프로그램 실행 속도를 빠르게 하는 기술.

 

위 레퍼런스를 보면, 반복문을 한번만 실행하면서 그 값들을 객체에 넣어준다.

(내가 적은 풀이는 이중 반복문을 이용하여 시간복잡도가 높다.)

그리고 동일한 값이 cache라는 객체에 있다면 바로 false를 반환해준다.

'자료구조알고리즘 > 코드스테이츠 Coplit' 카테고리의 다른 글

18_numberSearch  (0) 2022.03.25
15_modulo  (0) 2022.02.24
14_superIncreasing  (0) 2022.02.22
11_removeExtremes  (0) 2022.02.18
10_insertDash  (0) 2022.02.18