일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 부족한 금액 계산하기
- useReducer
- Node
- EC2
- utf8mb4
- 프리티어
- 리액트코드정렬
- next #middleware
- elasticIP
- 코드정렬
- MySQL
- 커밋 한번에
- dotenv
- prettier
- 제일 작은 수 제거하기
- s3확장자
- AWS
- axios
- 리액트
- 자연수 뒤집어 배열로 만들기
- vscode
- 자동완성방지
- 프로그래머스
- 코딩테스트
- express
- .env
- reacts3
- interactive_timeout
- max_allowed_packet
- react
- Today
- Total
Sungtt
Lev.2 프로그래머스 이진 변환 반복하기 본문
프로그래머스 [이진 변환 반복하기]
문제 설명
0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. x의 모든 0을 제거합니다. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다. 예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다. 0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
s의 길이는 1 이상 150,000 이하입니다.
s에는 '1'이 최소 하나 이상 포함되어 있습니다.
직접 풀이 결과
function solution(s) {
var answer = [0,0];
function trans(string){
if(string ==='1') return;
answer[0]++;
let deleteZero = [...string].filter((i,index) => {
if(i === '0'){
answer[1]++;
}else{
return i
}
}).join('');
let binary = deleteZero.length.toString(2);
trans(binary)
}
trans(s)
return answer;
}
문제 설명의 1번과 2번 동작을 반복하는 재귀함수를 작성하여 구현했다.
먼저 빈 배열이었던 answer에 각 횟수를 기록할 요소 0,0을 추가하였다.
그리고 trans라는 재귀함수가 호출될 때마다 이진변환 횟수를 증감시켜주고,
filter를 사용하여 문자열이 '0'일 경우에만 0이 제거된 횟수를 증감시킨다.
아닐경우에는 요소를 리턴시켜 1이 모인 배열이 생성되고
이 배열을 다시 문자열로 join시킨 뒤, 길이를 2진법으로 표현하여 다시 trans를 재귀한다.
재귀함수의 멈춤조건은 string === '1'로 하여 오버플로우 에러를 방지한다.
----------
다시 보니 굳이 join해줄 필요없을것같다. 길이만 있으면되기때문에 배열의 길이로 참조하였어도
정상 작동한다.
참고 풀이 결과 - 1
function solution(s) {
var answer = [0,0];
while(s.length > 1) {
answer[0]++;
answer[1] += (s.match(/0/g)||[]).length;
s = s.replace(/0/g, '').length.toString(2);
}
return answer;
}
while문을 통해 s의 길이가 1보다 크면 반복한다.
나와 같은 방식으로 횟수를 기록하지만
0을 제거하는 방식에서 많이 달라진다.
정규표현식을 통해 문자열에서 0을 골라내어 그 길이를 합산시켜주고,
s에는 replace를 통해 0을 제거하고, 그 길이를 2진법으로 변환시켰다.
후기
재귀함수를 만들었다는 점에서는 해결한 순간에는 기뻤지만 다른 사람의 풀이를 보니 과한 코딩이었다.
'코테' 카테고리의 다른 글
Lev.1 프로그래머스 3진법 뒤집기 (0) | 2023.03.21 |
---|---|
Lev.1 프로그래머스 약수의 개수와 덧셈 (0) | 2023.03.20 |
Lev.1 프로그래머스 나누어 떨어지는 숫자 배열 (0) | 2023.03.19 |
Lev.1 프로그래머스 정수 제곱근 판별 (0) | 2023.03.19 |
Lev.1 프로그래머스 푸드파이트 대회 (0) | 2023.03.10 |