티스토리 뷰
Lesson1. BinaryGap
안녕하세요!
자료구조와 알고리즘의 필요성에 대해서는 항상 느끼고 있었지만, 타 프로젝트나 시간이 없다는 등의 핑계로 미루기 일쑤였습니다.
그래서, 오늘부터 매일은 안 되더라도 적어도 일주일에 한 문제씩은 꼭 풀어보려 합니다.
같이 문제에 대해 탐구해보는 좋은 시간이 되었으면 좋겠습니다!
Question
https://app.codility.com/programmers/lessons/1-iterations/binary_gap/
정리하자면, 정수의 2진 표현에서 1과 1사이에 있는 0의 가장 긴 순서를 찾는 문제입니다.
정수의 2진 표현이 100001과 같다면 4를 반환, 10001001과 같다면 3과 2중 더 큰 3을 반환, 10000과 같이 0이 1과 1사이에 있지 않다면 0을 반환하면 됩니다.
Answer
저는 주어진 정수가 이진수로 변환됐을 때, 1이 위치한 인덱스만 알면 해결이 훨씬 수월할 것 같아 다음과 같이 풀이했습니다.
1. 주어진 정수를 2진수로 변환하기
2. 변환된 2진수를 배열로 변환
3. 배열을 돌며, 1이 들어있으면 해당 인덱스를 배열 (스택) 에 push
4. 인덱스 배열의 길이 (length) 가 2보다 작으면, 0이 1과 1 사이에 있지 않다는 말이므로 0 반환
5. 이외의 경우에는, 인덱스 배열을 돌며 max 값을 찾음 (arr[index] - arr[index - 1])
6. 실제 0의 개수는 max보다 1 작으므로, 최종적으로 max - 1 반환
풀이 코드는 아래와 같습니다.
// 2진수 배열에서 1이 위치한 인덱스들의 배열을 반환하는 함수
function getIndicesArrOfOne(bin) {
const binArr = bin.split('');
const indicesArr = [];
for (let i = 0, arrLeng = binArr.length; i < arrLeng; i++) {
if (binArr[i] === '1') {
indicesArr.push(i);
}
}
return indicesArr;
}
// 메인
function solution(N) {
const bin = N.toString(2);
const indicesArr = getIndicesArrOfOne(bin);
if (indicesArr.length < 2) {
return 0;
}
let max = 0, result = 0;
for (let i = 1, arrLeng = indicesArr.length; i < arrLeng; i++) {
result = indicesArr[i] - indicesArr[i - 1];
if (max < result) {
max = result;
}
}
return max - 1;
}
/*
- 주어진 N이 1183일 경우 -
bin = "10010011111"
indicesArr = [0, 3, 6, 7, 8, 9, 10]
for문을 돌면서, max 값은 3으로 변함
따라서, 실제 0의 개수는 max보다 1이 작은 2개
*/
The End
이상 BinaryGap에 대한 풀이였습니다.
다음 포스팅에는 Lesson2. CyclicRotation의 풀이에 대해 적어보려 합니다.
봐주셔서 감사합니다!
'Codility' 카테고리의 다른 글
Codility - TapeEquilibrium 풀이 (0) | 2019.05.14 |
---|---|
Codility - PermMissingElem 풀이 (0) | 2019.04.30 |
Codility - FrogJmp 풀이 (0) | 2019.04.25 |
Codility - OddOccurrencesInArray 풀이 (0) | 2019.04.23 |
Codility - CyclicRotation 풀이 (0) | 2019.04.17 |
- Total
- Today
- Yesterday
- infinite-scrolling
- react-hooks test
- react-testing-library
- jest reducer test
- ES2020
- 효율적인 디버깅
- jest reducer 테스트
- dependencies
- void 0
- codility
- react hoc 테스트
- 크롬 퍼포먼스 탭
- redux-mock-store
- hoc test
- reducer test
- Package
- tsconfig.json
- esModuleInterop
- NPM
- js debugger
- vue.js
- axios
- react-infinite-scroll
- javascript
- devDependencies
- ES6 Module
- difference_1.default is not a function
- infinite-scrolling 구현
- react-waypoint
- jest react test
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |