728x90
반응형
🔶 이진법
≣ 목차
/ 오늘의 TIL /
- 이진법은 Integer.toBinaryString() 메서드를 통해 값을 구할 수 있다.
- queue 풀이
import java.util.*;
class Solution {
public int[] solution(String s) {
//초기 값 세팅
Queue<Integer> queue = new LinkedList<>();
for (char c : s.toCharArray()) {
queue.add(c - '0');
}
int zeroCnt = 0, answer = 0;
while (queue.size() != 1) {
//queue 에 0이 없을 때까지 진행
int qs = 0;
while (qs != queue.size()) {
int cur = queue.poll();
//0인 경우 제거하고, 제거된 0의 개수를 늘린다.
if (cur == 0) zeroCnt++;
//1인 경우 다시 queue 에 넣는다.
else {
queue.add(cur);
qs++;
}
}
//queue 크기를 가지고 2진수 진행
int size = queue.size();
//s 가 1인 경우 조기 종료
if (size == 1) {
answer++;
break;
}
//새로운 값을 저장하기 위해 큐의 값을 초기화 시킨다.
queue.clear();
while (true) {
//2를 나눈 나머지를 queue 에 넣기
queue.add(size % 2);
size /= 2;
//1인 경우 중단
if (size == 1) {
queue.add(size);
break;
}
}
answer++;
}
return new int[]{answer, zeroCnt};
}
}
- 다른 사람 풀이를 보고 이해한 후, 리팩토링 진행
- 어제 처음으로 느꼈는데 최종 값을 구할 때는 하나씩 접근하기 보다.. 수학적으로 계산하는 접근 방법을 사용하면 좀 더 쉬운 표현이 될 것!
- 그래도 아예 못 푸는 것보다 풀이를 했다는 점에 칭찬을 해주고 싶당~~
class Solution {
public int[] solution(String s) {
//answer[0]: 이진 변환 횟수, answer[1]: 0 제거 개수
int[] answer = new int[2];
//s 가 1이면 중단
int tmp = 0;
while (!s.equals("1")) {
answer[1] += s.length(); //s 초기 길이
s = s.replaceAll("0", ""); //정규식으로 0 제거
tmp = s.length(); //0이 제거된 s 길이
s = Integer.toBinaryString(tmp); //이진법 진행
answer[1] -= tmp; //초기 길이 - 0 제거 길이
answer[0]++; //이진 변환 횟수
}
return answer;
}
}
728x90
반응형
'Blog > TIL' 카테고리의 다른 글
2025-01-07 (화) (0) | 2025.01.07 |
---|---|
2025-01-06 (월) (0) | 2025.01.06 |
[240906] 우선 순위 큐 (PriorityQueue) (0) | 2024.09.06 |
[240905] 코딩 테스트 풀이 (0) | 2024.09.05 |
[240626] JS 문법 (0) | 2024.06.26 |
댓글