惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
爱范儿
爱范儿
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
Latest news
Latest news
The Hacker News
The Hacker News
Cyberwarzone
Cyberwarzone
博客园 - 【当耐特】
Project Zero
Project Zero
小众软件
小众软件
T
Tailwind CSS Blog
量子位
博客园 - 聂微东
I
Intezer
美团技术团队
S
SegmentFault 最新的问题
T
Tor Project blog
Spread Privacy
Spread Privacy
V
Vulnerabilities – Threatpost
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Jina AI
Jina AI
罗磊的独立博客
B
Blog RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Troy Hunt's Blog
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享
C
Cisco Blogs
L
LINUX DO - 热门话题
Last Week in AI
Last Week in AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Azure Blog
Microsoft Azure Blog
L
LINUX DO - 最新话题
Know Your Adversary
Know Your Adversary
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
Lohrmann on Cybersecurity
The Register - Security
The Register - Security
L
LangChain Blog
博客园 - 叶小钗
T
Tenable Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

The Tracks of mulder21c

고정된 참조 위치 정보 선형 이미지의 최소 명도 대비 요구사항은 몇 대~ 몇? 단일 문자 단축키 (Character Key Shortcuts) 입력 방식(Input Modalities) 적응성(Adaptable) KWCAG 2.2 변경 사항 개요 Git hook으로 브랜치 이름 규칙 강제하기 댓글 시스템 remark42로 변경기 새 테마로 갈아입힘 Atomic Design + Storybook 적용 후기 json-server에 사용자 인증 구현하기 개발환경 WSL2 + zsh로 갈아타기 Pass function as props in vue 2020년 회고 colum flexbox에서 padding bottom 문제 해결 Nuxt를 통해 보는 프론트엔드 개발자가 하는 일 Nuxt Router kebab-case 처리 JS to SCSS 변환 Nuxt + Storybook 통합 하기 2020 이직 이야기 2020 이직 이야기 2020 이직 이야기 2020 이직 이야기 Windows에서 PM2 실행 오류 해결 오픈톡 정지에 대한 카카오톡 고객센터 후기 배려에 대한 단상 학습이 잘 되지 않는 이유 웹팩 4 마이그레이션 삽질기 babel 7 업데이트 후 node_modules 패키지가 변환되지 않는다면? white space는 4px이다? 정말? 2020년 시간 관리를 위해서 도입 한 툴들 Codility Lesson 5 — PassingCars 2019년 회고 Codility Lesson 4 — MissingInteger Codility Lesson 4 — MaxCounters Codility Lesson 4 — FrogRiverOne Codility Lesson — PermCheck 착각은 자유가 아닌각 세미나 진행 후기 Codility Lesson 3 — tapeEquilibrium Codility Lesson 3 — PermMissingElm Codility Lesson 3 — FrogJump 알고리즘 연습을 다시 시작했다. Codility Lesson 2 — CyclicRotation Codility Lesson 2 — OddOccurrencesInArray 아이패드 구매 하고 3주 써 본 기록 세미나 어떻게 준비해야 할까? HTML은 웹이다 접근성 향상을 위한 이름 짓기 접근성 교육에서 자주 나오는 상위 5가지 질문
Codility Lesson 1 — BinaryGap
멀더끙 · 2019-09-11 · via The Tracks of mulder21c

Task

주어진 정수의 2진 표현에서 가장 긴 zero sequence 구하기.

How I did solve

binary 변환

주어진 정수를 2로 나누어

  • 나눈 나머지를 뒤에서부터 채움
  • 몫을 다시 2로 나눈 나머지를 그 다음에 채움
  • 몫이 0이 될 때까지 반복

재귀 함수 이용

zero gap 구하기

  1. binary를 문자열로 받아서
  2. trailing zero 제거
    : 정규식 이용
  3. 1로 split하여 zero gap 배열을 취하고
  4. 이를 오름차순 정렬
  5. 배열의 마지막 요소의 길이를 반환
  6. 배열의 마지막 요소가 없을 경우 0 반환

Solved Code

function solution(N) {
  const getBinary = (n) => {
    let quot = Math.floor(n/2);
    let mod = n % 2;

    if(quot < 1) {
      return mod + ``;
    }else {
      return getBinary(quot) + mod;
    }
  }

  const binary = getBinary(N);
  const result = binary
    .replace(/0+$/g, '')
    .split('1')
    .sort( (a,b) => a.length - b.length )
    .pop();

  return result ? result.length : 0;  
}

Retrospective

  • 간만에 재귀함수를 만드려니 머리가 잠깐 멈추더라…

  • 사실 처음 생각해 낸 프로세스에는 불필요한 프로세스가 끼어있었다.

    .split('1') 이후에 emptry string을 제거하는 프로세스 즉, .filter( entry => !!entry )가 있었는데, sorting 하면서 필요 없다는걸 깨닫고 프로세스에서 제거.

    결과에는 영향을 주지 않지만 불필요한 연산이 끼어든다는 건, 생각의 흐름 속에서 깊이있는 사고가 되지 않고 있다는 것이거나 한 번에 생각할 수 있는 청크가 크지 않다는 것일 듯 하다.

  • 2진수 변환을 굳이 재귀함수를 쓸 필요가 없었다는 게 뒤늦게 생각났다.

    Number.prototype.toString(radix)를 사용하면 재귀함수를 사용할 이유가 없어진다…
    (재귀함수를 오랜 만에 작성해봤다는데 의의를 두련다…)

Hero image from pixabay