🎉🥳 드디어 월간 코드 챌린지 시즌 1 입성!! 🎉🥳
JavaScript 는 메인 언어이기도 하면서 자신감이 붙어 LVL. 0 ~ LVL. 3 까지 가리지 않고 문제를 풀기로 했다.
확실히 난이도가 올라가는구나! 하지만 재밌다. 풀어보자.
집중 포인트.
Denny 야 집중해..!
항상 특정 작업을 수행할때에는 고객들의 요구사항에 집중 해야 한다.
요구 사항을 잘못 이해하면 작업의 모든것이 틀어진다. 이건 조준과 같다. 1mm 의 오차가 거리에 따라 몇km 의 오차를 내는것과 같다. 작업이 점점 크게 틀어진다는 뜻이다. 조금 오버를 해서라도 완벽 정리 및 이해가 필요하다.
집중 포인트 1. : x 는 String 타입 이다.
집중 포인트 2. : "이진 변환" 이라는 action 을 정의해줬다.
- 1. String x 에서 0을 제거 후 길이(int) 구함.
- 2. 길이를 2진법으로 변환 후 타입을 String 으로 parse.
- 3. 위 1, 2 번을 "이진 변환" 의 1 round 로 하고 반복하여 "1" 이 될때까지 rounds 진행
- 4. "1" 이 되면 결과 값 추출 -> [ "이진 변환 round 반복 횟수" , "이진 변환 과정에서 반복으로 제거된 0 의 총 갯수" ]
위 분석을 바탕으로 문제를 풀어보자.
Answer 1
function solution(s) {
let answer = [0 , 0];
while(s !== "1" && parseInt(s) > 1) {
const removedLength = s.split('').filter(d => d !== "0").length;
answer[1] += s.length - removedLength;
s = removedLength.toString(2);
answer[0] += 1;
}
return answer;
}
const result = solution("110010101001");
console.log("The answer is >>> " , result)
// The answer is >>> [3, 8] -> Which is correct!
첫번째는 필자의 답안이다.
while 문을 활용하여 s 의 값이 문자 "1" 이 될때까지 반복문을 실행하도록 처리했다.
while 문 안에는 split 으로 문자 배열을 만든다음 filter 를 사용해 0 을 제거 후 배열의 길이를 구해 상기 [집중 포인트]에 1번 과정을 수행했다.
그다음 .toString(2) 로 길이를 이진 변환 시킨다음 반복문의 횟수를 기록하기 위해 answer 변수의 배열에 첫번째 인자를 1 올렸다.
이후 s 가 "1" 이 될때까지 while 문은 반복한다.
결과 [3, 8] 이 정상적으로 출력되는것을 확인 할 수 있다.
상기 문제는 이제까지 풀어오던것들 보다는 확실히 난이도가 있었다.
좀더 세련된 답안이 있을것이다. 찾아보자.
Answer 2 [. My Favorite]
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 반복문을 돌려 원하는 결과가 도출될때까지 로직을 반복 시켰다.
그리고 증가 연산자를 사용해 반복의 횟수를 기록했다.
match() 함수를 사용해 regExp 로 제거될 0의 갯수를 찾고 answer[1]에 기록했다.
그다음 replace 를 사용해 0을 제거하고 길이를 구해 toString(2) 으로 이진 변환해주었다.
.match(), 와 .replace() 의 존재를 다시금 각인시킨 답이다. 재밌었다.
'프로그래머스 - 코딩테스트' 카테고리의 다른 글
[JavaScript][프로그래머스] 문자열 정수의 합 (0) | 2023.06.06 |
---|---|
[JavaScript][코딩테스트] 첫 번째로 나오는 음수 (0) | 2023.06.06 |
[JavaScript][프로그래머스] - LVL.0 주사위의 개수 (0) | 2023.04.10 |
[JavaScript][프로그래머스] - LVL.0 주사위의 개수 (0) | 2023.03.12 |
[JavaScript][프로그래머스] - LVL.0 가위 바위 보 (0) | 2023.03.12 |