Algorithm) Codekata_Day 16

김명성·2021년 8월 10일
0

Algorithm

목록 보기
17/61
post-thumbnail

❓ Question

양수를 이진법으로 바꿨을 때, 1 사이 연속되는 0의 개수 중 가장 큰 값을 구하자.

📝 My Solution

우선 들어온 양수를 toString 메소드를 통해 2진수로 변환하고,
문자열을 하나하나씩 쪼개서 배열에 저장했다.

해당 배열을 뒤에서 부터 찾아오는 방식으로 하고,
1이 등장하면 그 부분부터 잘라내 해당 배열의 length를 maxNum 배열에 넣었다.
그 후 맨 뒤에 다시 1을 넣어주면서 1과 1사이의 0을 셀 수 있도록 했다.

그렇게 진행이 되고, map 메소드를 사용해서 1의 값을 제외하기 위해 2를 빼고,
그 중에서 가장 큰 값을 찾아 값을 반환했다.


▪️ Solution result

해당 로직은 맨 뒤에 32 (10000) 나 20 (10100) 같은 환경에서는
제대로 된 결과값을 반환하지 못했다.


📝 Another Solution

일단 시작은 같다.
들어온 양수를 이진수로 변환 시켜주고, num이라는 변수를 설정해서
마지막부터 시작해 1을 찾아 해당 인덱스 값을 넣어주었다.

그 후, 32와 같이 맨 앞에 1만 있고, 아무것도 없는 숫자들을 타깃해
num이 0이면 num값을 반환했다.

그게 아니면 마지막 1이 등장하는 뒷부분을 잘라내고
위에 있는 코드와 진행방식을 같게 해줬다.

뒤를 잘라내주는 이유는 (101000) 일 때, 뒤에 1이 안붙으면 의미가 없어서 잘랐다.

그리고는 map 함수를 돌렸는데 이번에는 1만 빼줬다.
그렇게 해서 배열에서 가장 큰수를 반환하는 코드를 짰다.


▪️ Solution review

코드카타를 진행하면서 주어진 값에만 맞추려다 보니
중간 중간 오류가 발생하는 경우가 종종 생기는데,
어떤 값이 들어오던 다 만족 할 수 있는 코드를 짤 수 있도록 해야겠다.

profile
잠재력은 핵폭탄급 Frontend Developer

0개의 댓글

관련 채용 정보