-
[CodeKata] 프로그래머스 : 3.10(수), 이진 변환 반복하기Algorithm 2021. 3. 10. 12:32반응형
🥋 Ooooth!! (Level 2)
🧮 풀이
function solution(s) { let answer = [0, 0]; while(s !== "1") { const sOneLen = s.replaceAll("0", "").length; // const sOneLen = s.split("").filter(e => e === '1').join("").length; answer[0]++; answer[1] += s.length - sOneLen; s = sOneLen.toString(2); } return answer; }
- answer는 정답 튜플이다. 0번째는 변환 횟수, 1번째는 제거된 0의 갯수를 저장할 것이다.
- while 반복문을 반복한다. 종료조건은, s가 "1"이 될 때이다. "1"은 이진변환해도 "1"이므로 더 이상 진행이 불가함.
- sOneLen은 s에서 "0"을 제외한 길이값이 된다. 1) replaceAll([바꿀 문자], [바뀔 문자]) 메서드를 추천하지만, 프로그래머스 인식이 안되어 2) (split + filter + join) 조합으로 대체하여 풀었다.
- answer[0]은 횟수이므로 1을, answer[1]은 제거된 "0" 개수이므로 (s 전체 길이 - sOneLen) 만큼 더해준다.
- s를 sOneLen을 이진법 변환(toString([진법])) 한 값으로 치환한다.
* 종료조건을 s.includes("0") 로 초기 설정했다. 이 경우엔, "111111" 같은 경우가 진행되지 않으므로 위처럼 수정하게 된 것이다.
🥋 Another One! : JS 100제(#98), 청길이의 패션 대회
🧮 풀이
const chungil = (str) => { return str .split(" ") .filter((_,i) => i%2 === 1) .join(",") .split(",") .reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], []) .map(e => Number(e)) }
- space로 split(" ") 하면, "1번" -> "4,2,3" -> "2번" -> "3" .... 순으로 반복된다. 이를 홀수 인덱스의 숫자모음들만 filter 한다.
- 이를, join(",") 한 뒤, 다시 콤마로 split(",") 하면 각각의 모든 숫자들로 이루어진 1차원 배열로 만들 수 있다.
- 이를, reduce를 통해 중복값을 제거한다. 마지막으로, 반환형태가 숫자이므로 각 요소에 map을 통해 Number() 처리를 한다.
* 처음엔, join + split이 아닌 map(e => e.split) + flat 조합을 사용했다. 위는, 동기의 풀이에서 차용한 것으로 훨씬 효율적이다.
🖇 리뷰
알고리즘을 풀수록, 다양한 매서드의 활용을 경험할 수 있어서 흥미롭고 유익하다.
동기들과 추가문제를 풀면서, 매서드의 효율적인 활용이나 배치도 다양한 방법이 있을 수 있다는 것을 다시금 느꼈다.
.map(e => Number(e))
반응형'Algorithm' 카테고리의 다른 글
[CodeKata] 프로그래머스 : 3.13(토), 피보나치 수 & 행렬의 곱셈 (0) 2021.03.13 [CodeKata] 프로그래머스 : 3.11(목), 최대값과 최소값 & 최소값 만들기 (0) 2021.03.11 [CodeKata] 프로그래머스 : 3.9(화), 숫자의 표현 (0) 2021.03.09 [CodeKata] 프로그래머스 : 3.8(월), 방문 길이 (0) 2021.03.08 [CodeKata] 프로그래머스 : 3.7(일), 게임 맵 최단거리 (0) 2021.03.07