본문 바로가기
JavaScript

JavaScript 알고리즘(5) Same Frequency Counter Pattern

by 새발개발JA 2022. 3. 23.
반응형

 

요즘에는 자바스크립트로 알고리즘 코드 패턴 공부 중이다. 여러 패턴들을 익히면서 재미를 찾아가는 중이다. 

오늘 공부한 패턴은 Frequency Counter Pattern 이다.

 

 


JavaScript 알고리즘(5) Same Frequency Counter Pattern

두개의 인자가 같은 숫자 혹은 글자 인지를 비교할 때,

하나의 객체에 요소 하나하나를 저장해 중복의 갯수를 표시하고, 나머지와 비교하며 같으면 제거해버린다.

만약에 같은 숫자라면 빈 객체로 돌아갈 것이고(true), 그게 아니라면 뭐라도 하나 남아있을 것이다.(false)

 

function sameFrequency(firstNum, secondNum){
    // 1. 숫자를 문자열로 만든다. (그래야 배열화할수있기 때문)
    const first = firstNum.toString();
    const second = secondNum.toString();
    
    // 2. 예외처리를 해준다. 길이가 같지않으면 조기탈락
    if(first.length !== second.length) return false;

    // 3. 빈 객체를 만들어주자
    const temp = {};
    
    // 4. 첫번째 숫자를 하나하나 검사해서 객체 안에 요소별로 들어있는 갯수를 저장하자
    for(let 1stVal of first){
        temp[1stVal] = (temp[1stVal] || 0) + 1; // temp 객체 안에 {키를 val로 : 갯수에 따라 1+ 씩} 저장해주자
    }
    
    // 5. 두번째 숫자를 하나하나 검사해서 위에서 만들어준 객체값이 같으면 -1 씩 빼주면서 검사하자
    for(let 2ndVal of second){
        if(!temp[2ndVal]){ 	// 만약 temp 안에 second의 val(키와 값)이 존재하지 않으면 
        	return false;   // false 를 리턴하고
        }
        temp[2ndVal]--;     	// (temp 안에 second의 요소와 같은게 있으면) 거기서 -1 씩 빼주자
    }
    return true; 		// 이 모든 시련(?)을 무사히 통과하면 true 를 반환한다.
}

 

 

 

 

더알아보기  - 객체에서 (Object)의 키와 값 가져오기 

빈 객체 temp 를 선언한뒤 객체에 

temp[1] = 1  이런식으로 선언해주면 

{ 1: 1 } 이런식으로 저장이 된다. (객체의 좋은점은 순서 없이 저장이 가능하다는 것이다.)

 

 

배열과 비교해보면

arr[0] = 1 이런식으로 선언해주면

[ 1 ]  이런식으로 저장이 되는 것과 같다. 

 

 

 

 

 

반응형

댓글