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;
}
}
2의 제곱승이 될수 있는 모든 경우를 맵으로 저장한다.
key : 2의제곱승이되는 값의 자릿수 , value : 자릿수에 맞는 2의 제곱승을 저장한 리스트
입력받은 숫자를 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를 반환한다.
없음
#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL