문제
https://school.programmers.co.kr/learn/courses/30/lessons/70129
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
0과 1로 이루어진 문자열 X를 이진 변환을 거쳐 '1'이 될때까지 반복해야 한다.
제한 사항을 잘 읽어보면 |S| <= 150,000이다.
이랬을 때 최대 "1" * 150,000라는 문자열이 입력으로 들어올 수 있다는 것이다.
근데 이 상황은 바로 2진법으로 나타내면 길이가 18자리로 줄어들게 된다.
고로 문제에서 시키는 대로 구현을 진행하면 된다.
정답코드
더보기
'''
'25. 08. 06
1. x의 모든 0을 제거
2. x의 길이를 c라고 하면, c를 2진법으로 바꾸기
|S|
ex) 1로만 이뤄진 '1' * 150,000라고 한다면
2. 2진법으로 교체하는 것은 log2 시복
한 번 할 때마다 확확 줄기 때문에 구현으로 풀면 됨.
'''
def solution(s):
#변환 횟수, 제거된 0 갯수
answer = [0, 0]
info = [len(s), s.count('0'), s.count('1')]
while not (info[0] == 1 and info[2] == 1):
#0의 갯수를 더해주기
answer[1] += info[1]
#2진법으로 나타내기
s = bin(info[2])[2:]
info = [len(s), s.count('0'), s.count('1')]
#변환 횟수 한 번 더해주기
answer[0] += 1
return answer
깃허브 : https://buly.kr/6Ms0wpd
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / 스택 / 짝지어 제거하기 (0) | 2025.08.09 |
|---|---|
| 프로그래머스 / 투포인터 / 숫자의 표현 (0) | 2025.08.07 |
| 프로그래머스 / 문자열 / JadenCase 문자열 만들기 (0) | 2025.08.06 |
| 프로그래머스 / 정렬 / 최솟값 만들기 (0) | 2025.08.05 |
| 프로그래머스 / 구현 / 최댓값과 최솟값 (0) | 2025.08.05 |