▼ Why ? What ?
1일 1알고리즘 스터디에서 "이진 변환 반복"라는 문제를 풀었다. 이번 문제도 간단해서 쉽게 해결했던 것 같고, 메서드를 사용해서 더 간단하게 해결한 코드를 참고해서 다시 풀어봤다.
▼ 알고리즘 문제 : "이진 변환 반복"
이진 변환 반복
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[ 나의 해결 코드 1 ]
class Solution {
public int[] solution(String s) {
int[] answer = new int[2];
int zeroCnt = 0, transformCnt = 0;
while (!s.equals("1")) {
int length = s.length();
for (char c : s.toCharArray()) {
if (c == '0') {
length--;
zeroCnt++;
}
}
StringBuilder sb = new StringBuilder();
while (length > 1) {
sb.append((length % 2) + "");
length /= 2;
}
sb.append("1"); // MSB
s = sb.reverse().toString();
transformCnt++;
}
answer[0] = transformCnt; answer[1] = zeroCnt;
return answer;
}
}
[ 나의 해결 코드 2 ]
- 이전에도 `toBinaryString` 같은 진법 변환에 유용한 메서드들을 썼던 것 같은데 다음엔 꼭 활용해보자..!
- 불필요한 변수를 따로 만들지 않고 배열 값을 수정해주는 방식으로 했으면 더 좋았을 것 같다.
class Solution {
public int[] solution(String s) {
int[] answer = new int[2];
int length;
while (!s.equals("1")) {
answer[1] += s.length();
s = s.replaceAll("0", "");
length = s.length();
s = Integer.toBinaryString(length);
answer[0]++; // 이진 변환 횟수
answer[1] -= temp; // 제거한 0의 개수
}
return answer;
}
}