99클럽 코테 스터디 33일자 TIL +reordered-power-of-2

이월(0216tw)·2024년 6월 21일
0

99클럽/알고리즘풀이

목록 보기
31/38

문제 출처

https://leetcode.com/problems/reordered-power-of-2 (leetcode)

학습 키워드

정렬

시도 방법

(1)2의 배수가 될수 있는 모든 경우의 숫자를 찾아 저장한다
이때 자릿수에 따라 달리 저장할 수 있도록 해시맵을 활용했다.
예]
key:1 => 2 4 8
key:2 => 16 32 64
key:3 => 128 ...

(2) 입력받은 숫자를 char[] 배열화 시켜 정렬을 했다.
풀이전략으로는 char[]의 정렬된 내용과 위에서 key 길이만큼에 대한 리스트의
값들을 정렬시켜 하나씩 비교했을때 모두 같으면 완전똑같으니 true를 리턴했다.
반복문이 끝나고 일치하지 않으면 false를 리턴한다.

내가 작성한 코드

class Solution {
    public boolean reorderedPowerOf2(int n) { 
        
        HashMap<Integer , List<Integer>> power2List = createPower2List();      
        
        char[] nToCharArray = String.valueOf(n).toCharArray(); 
        List<Integer> checklist = power2List.get(nToCharArray.length); 

        return isPowerOf2(nToCharArray , checklist); 
    }


    public HashMap<Integer , List<Integer>> createPower2List() {

        HashMap<Integer , List<Integer>> power2List = new HashMap<>(); 

        for(int i = 0; i<32; i++) {
            
            int num = (int)Math.pow(2 , i); 
            int length = String.valueOf(num).length(); 

            if(power2List.get(length) == null) {
                power2List.put(length , new ArrayList<>()); 
            } 
            power2List.get(length).add(num);                 
        }

        return power2List; 
    }

    public boolean isPowerOf2(char[] nToCharArray , List<Integer> checklist) {
        
        //정렬처리
        Arrays.sort(nToCharArray); 
        
        for(int i = 0 ; i<checklist.size(); i++) {  

            char[] tmp = String.valueOf(checklist.get(i)).toCharArray();
            Arrays.sort(tmp); 
            int n = 0 ; 

            for(int j = 0 ; j<tmp.length; j++) {
                if(tmp[j] == nToCharArray[j]) {
                    n++; 
                }
            }

            if(n == tmp.length) return true; 

            n = 0 ; 
        }

        return false; 
    }
}

코드설명

createPower2List

2의 제곱승이 될수 있는 모든 경우를 맵으로 저장한다.
key : 2의제곱승이되는 값의 자릿수 , value : 자릿수에 맞는 2의 제곱승을 저장한 리스트

isPowerOf2

입력받은 숫자를 char[] 화 하여 정렬한다.
예를 들어 [9640] 이라면 ['9' , '6' , '4' , '0'] 이고 이를 정렬하면
['0' , '4' , '6' , '9'] 가 된다.

총 4자리이므로 key : 4 인 [1024 , 2048 , 4096 ... ] 리스트를 하나씩 조회한다.

예를들어 1024라면 ['0' , '1' , '2' , '4'] 이고 위 ['0' , '4' , '6' , '9'] 와 일치하지 않으므로 반복문을 지속한다.

4096의 경우에 일치하게 되므로 true를 리턴하고 , 반복문이 끝날때까지 같은게 없다면 false를 반환한다.

출력결과


새롭게 알게된 점

없음

다음에 풀어볼 문제 - find-the-winner-of-the-circular-game



#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL

profile
Backend Developer (Financial)

0개의 댓글