Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- BFS
- ์๋ฎฌ๋ ์ด์
- ๊ตฌํ
- ๋นํธ๋ง์คํน
- ๊ทธ๋ฆฌ๋
- ํฌํฌ์ธํฐ
- ์ฌ๊ท
- ์ด์งํธ๋ฆฌ
- dp
- dfs
- Django
- ์ธ๊ทธ๋จผํธํธ๋ฆฌ
- ์๋ฃ๊ตฌ์กฐ
- LowerBound
- ๋ค์ต์คํธ๋ผ
- upperbound
- ์นด์นด์ค
- Union Find
- ํธ๋ผ์ด
- Floyd
- ์กฐํฉ
- ํ๋ก์ด๋์์
- ์ด๋ถํ์
- ๋ฐฑํธ๋ํน
- ์ฐ์ ์์ํ
- ์์ด
- ํ์๊ฐ์
- Dijkstra
- ๋ถ๋ถ์งํฉ
- PriorityQueue
Archives
- Today
- Total
J
[JAVA] Programmers ํํ ๊ฐ๋ฅํ ์ด์งํธ๋ฆฌ ๋ณธ๋ฌธ
๐ Problem Solving/๐ซ Programmers
[JAVA] Programmers ํํ ๊ฐ๋ฅํ ์ด์งํธ๋ฆฌ
snowball๐ฐ 2023. 5. 9. 10:22ํ์ด ๋ฐฉ๋ฒ
- Queue๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๊ฐ์ ์์ parent์ node ๊ฐ์ ์ ์ฅํด์ค๋ค.
- convert ํจ์๋ฅผ ํตํด num์ ์ด์ง์๋ก ๋ณํํ๋ค.
- ์ด๋ ์์์ 63์ ์๊ฐํด๋ณด๋ฉด ์๋์ ์ด์ง์๋ 1๋ถํฐ ์์ํด์ผ ํ๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ์์ ์ด์งํธ๋ฆฌ๋ฅผ ์๊ฐํ์ ๋ ์ด์ง์์ ๊ธธ์ด์ ๊ฐ์ ๋ง์ถ๊ธฐ์ํด ์์ 0์ ์ถ๊ฐํด์ผ ํจ์ ์๊ฐํ์.
- ๊ฐ๋ฅํ ์ด์ง์์ ๊ธธ์ด๋ nums ๋ฐฐ์ด์ ์ ์ฅํด๋์๋ค.
- ๊ฐ๋ฅํ ์ด์ง์์ ๊ธธ์ด๊ฐ ๋๊ฒ ํ๊ธฐ ์ํด ๊ทธ๋งํผ ์์ 0์ ์ถ๊ฐํด์ฃผ์
- check ํจ์๋ฅผ ํตํด ์ด์งํธ๋ฆฌ๊ฐ ๋๋์ง ํ์ธํ๋ค.
- ์ง์์ ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ์ ์ฅํด๋ roots๋ฐฐ์ด์ ํ์ธํ๋ค.
- ํ์์ ๊ฒฝ์ฐ 4๋ก ๋๋ ๋๋จธ์ง๊ฐ 1์ธ ์น๊ตฌ๋ค๊ณผ 2์ธ ์น๊ตฌ๋ค์ ๋ฐ๋ผ parent๊ฐ ๋ค๋ฅด๋ค.
- ๊ฐ๋ฅํ ์ด์งํธ๋ฆฌ๊ฐ ๋๋ ค๋ฉด ์์์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ถ๋ชจ๊ฐ ์กด์ฌํด์ผ ํ๋ค.
import java.util.*;
class Solution {
static int[] nums = {1, 3, 7, 15, 31, 63};
static int[] roots;
public int[] solution(long[] numbers) {
int N = numbers.length;
int[] answer = new int[N];
roots = new int[64];
// Queue ์ฌ์ฉํ๊ธฐ
ArrayDeque<int[]> q = new ArrayDeque<>();
q.offer(new int[]{32, 16});
while(!q.isEmpty()){
int[] now = q.poll();
if(now[1] == 1) break;
roots[now[0]-now[1]] = now[0];
roots[now[0]+now[1]] = now[0];
q.offer(new int[]{now[0]-now[1], now[1]/2});
q.offer(new int[]{now[0]+now[1], now[1]/2});
}
for(int i=0; i<N; i++){
String c = convert(numbers[i]);
answer[i] = check(c);
}
return answer;
}
static int check(String s){
int root = s.length()/2+1;
for(int i=1; i<=s.length(); i++){
if(i == root) continue;
if(i % 4 == 1 && s.charAt(i-1) == '1'){
if(s.charAt(i) == '0') return 0;
}
else if(i % 4 == 3 && s.charAt(i-1) == '1'){
if(s.charAt(i-2) == '0') return 0;
}
else if(i % 2 == 0 && s.charAt(i-1) == '1'){
if(s.charAt(roots[i]-1) == '0') return 0;
}
}
return 1;
}
static String convert(long num){
String r = "";
while(true){
r = (num % 2) +r;
if(num == 0 || num == 1) break;
num /= 2;
}
for(int i=0; i<6; i++){
if(r.length() == nums[i]) return r;
if(r.length() < nums[i]){
int N = nums[i]-r.length();
for(int j=0; j<N; j++)
r = "0"+r;
return r;
}
}
return r;
}
}
'๐ Problem Solving > ๐ซ Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] Programmers ๋ฏธ๋ก ํ์ถ ๋ช ๋ น์ด (0) | 2023.05.08 |
---|---|
[JAVA] Programmers ํ ๋ณํฉ (0) | 2023.05.08 |
Comments