320x100
문제 : programmers.co.kr/learn/courses/30/lessons/70129
s에는 '1'이 최소 하나 포함되어 있다고 하는데 그럼 s가 "0"이 될 가능성이 없다는 뜻이다. 이진법으로 변환하면 나올 수 있는 한자리를 가진 문자열은 "0", "1"인데 "0"은 나올 수 없다고 제한사항에 있기 때문에 s 길이가 1인 경우 문자열은 반드시 "1"이 된다.
따라서 반복문 종료조건을 s 길이가 1보다 큰 경우로 잡았다. => 해당 반복문 반복횟수를 cnt라 한다.
s 문자열을 탐색하면서 '0'의 개수를 센다. 이를 0의 총 개수를 저장하는 변수(let, zeroCnt) 1에 더해서 갱신해준다.
x의 모든 0을 제거한 뒤 x의 길이를 c 라고 한다면 결국, x(= 문자열 s)의 총 길이에서 0 개수를 뺀 만큼이 c라는 소리가 된다.
c를 이진법으로 바꾼다. 이진법으로 바꾸는 방법은 c가 0이 될때까지 2의 나머지를 배열에 차례대로 저장하고 c는 /2로 갱신한다. c가 0이되서 반복문이 끝났을 때 저장한 배열을 reverse하면 2진법이된다.
하지만 이 문제에서는 이진법이 된 정확한 수가 궁금한게 아니고 결국 2진법으로 변환된 문자열의 0, 1의 개수만을 궁금해한다. 따라서 굳이 reverse를 해서 계산할 필요는 없다.
모든 반복문이 끝났을 때 { cnt, zeroCnt } 가 정답이 된다.
320x100
'알고리즘 문제 > Programmerse' 카테고리의 다른 글
[programmers][2021카카오공채] 신규 아이디 추천 (0) | 2021.02.01 |
---|---|
[programmers][월간 코드 챌린지 시즌1] 스타 수열 (0) | 2020.11.08 |
[programmers][월간 코드 챌린지 시즌1] 내적 (0) | 2020.11.07 |
[programmers][월간 코드 챌린지 시즌1] 트리 트리오 중간값 (0) | 2020.10.18 |
[programmers][월간 코드 챌린지 시즌1] 쿼드압축 후 개수 세기 (0) | 2020.10.17 |
댓글