내용 복습/알고리즘
프로그래머스 Lv.2 이진변환 반복
jskim4695
2024. 6. 27. 19:16
일단 문제를 어떻게 풀어야하는지 이해가 쉽지 않아서 for문으로 풀어보려 했는데, toString(2)의 존재를 알지 못해서 다른 분의 풀이를 참고하게 됐다.
function solution(s) {
var answer = [0, 0];
let sLen = 0;
while (s.length > 1) {
sLen = s.length;
// 0을 구분자로 하여 split을 해주고 join하여 문자열에서 0을 제거한다.
s = s.split("0").join("")
// 반복할 때마다 answer배열의 첫번째요소에 1씩 더해준다.
answer[0]++
// 반복할 때마다 원본의 sLen와 0을 제거한 s의 길이를 빼준 값을 두번째 요소에 더해준다.
answer[1] += (sLen - s.length)
// toString(2)는 2진수 문자열로 변환하는 메소드이다.
s = s.length.toString(2)
}
return answer;
}
1. split (구분자, limit)
split("")으로 주로 사용하여 단순하게 문자열을 배열로 변환하는 방식으로 사용해왔는데, 원래 사용방식을 보니 길이를 제한한 배열을 반환할 수 있다는 것도 알았다. 비록 이번 풀이에선 두번째 인자는 쓰지 않았지만, 0을 문자열에서 제거해야 하는 상황이었기 때문에 0을 구분자로 하여 쪼개면 쉽게 제거할 수 있었다.
2. toString(), perseInt()
perseInt와 toString() 모두 특정 객체를 문자열로 반환해주는 것으로 알고 있고 차이점을 몰랐는데 이번기회에 검색해보게 되었다. 쉽게 말하면 10진수를 다른 진수로 변환하기 위해선 toString()을, 다른 진수를 10진수로 변환하기 위해선 perseInt()를 사용한다고 한다. toString(2)와 같은 형태로 10진수를 2진수로 바꿀 수 있었다. 이 메소드의 사용법을 몰랐기 때문에 풀이가 막혔는데, 이번 기회에 정리할 수 있어 다행인 것 같다.