일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- BoB 12기
- 정보보안기사
- malware
- Best of the Best
- race condition
- 정보기
- 세마포어
- 필기
- cve-2022-26923
- 코드엔진
- DLL 사이드로딩
- 리버싱
- 뮤텍스
- 디지털 포렌식 트랙
- cve-2024-6387
- 디포전
- 프로그래머스
- 디포전 2급
- 디지털 포렌식 전문가 2급
- dll side-loading
- bob
- BoB 12기 최종합격 후기
- h4ckinggame
- CodeEngn
- 논문리뷰
- Active Directory
Archives
- Today
- Total
SEO
[프로그래머스/파이썬] 이진 변환 반복하기 본문
반응형
문제 설명
0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.
- x의 모든 0을 제거합니다.
- x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다.
예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다.
0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- s의 길이는 1 이상 150,000 이하입니다.
- s에는 '1'이 최소 하나 이상 포함되어 있습니다.
입출력 예
s | result |
"110010101001" | [3,8] |
"01110" | [3,3] |
"1111111" | [4,1] |
입출력 예 설명
입출력 예 #1
- "110010101001"이 "1"이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.
회차 이진 변환 이전 제거할 0의 개수 0 제거 후 길이 이진 변환 결과
1 | "110010101001" | 6 | 6 | "110" |
2 | "110" | 1 | 2 | "10" |
3 | "10" | 1 | 1 | "1" |
- 3번의 이진 변환을 하는 동안 8개의 0을 제거했으므로, [3,8]을 return 해야 합니다.
입출력 예 #2
- "01110"이 "1"이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.
회차 이진 변환 이전 제거할 0의 개수 0 제거 후 길이 이진 변환 결과
1 | "01110" | 2 | 3 | "11" |
2 | "11" | 0 | 2 | "10" |
3 | "10" | 1 | 1 | "1" |
- 3번의 이진 변환을 하는 동안 3개의 0을 제거했으므로, [3,3]을 return 해야 합니다.
입출력 예 #3
- "1111111"이 "1"이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.
회차 이진 변환 이전 제거할 0의 개수 0 제거 후 길이 이진 변환 결과
1 | "1111111" | 0 | 7 | "111" |
2 | "111" | 0 | 3 | "11" |
3 | "11" | 0 | 2 | "10" |
4 | "10" | 1 | 1 | "1" |
- 4번의 이진 변환을 하는 동안 1개의 0을 제거했으므로, [4,1]을 return 해야 합니다.
def solution(s):
answer = [0,0]
while s != "1":
answer[0] += 1
tmp = ""
for num in s:
if num == "0":
answer[1] += 1
else:
tmp += num
tmp = len(tmp)
s = ""
while tmp != 0:
s += str(tmp % 2)
tmp = tmp // 2
return answer
이 문제도 노가다로 구현하였습니다..
bin 함수가 있는지 모르고 그냥 이진수 변환 코드를 그대로 썼네요
def solution(s):
answer = [0,0]
while s != "1":
answer[0] += 1
tmp = ""
for num in s:
if num == "0":
answer[1] += 1
else:
tmp += num
s = bin(len(tmp))[2:]
return answer
bin 함수를 사용하면 이런 코드가 됩니당.
반응형
'코딩테스트 > 문제 풀이' 카테고리의 다른 글
[프로그래머스/파이썬] n진수 게임 (0) | 2025.03.21 |
---|---|
[프로그래머스/파이썬] 비밀지도 (0) | 2025.03.21 |
[프로그래머스/파이썬] 숫자 문자열과 영단어 (0) | 2025.03.17 |
[프로그래머스/파이썬] 없는 숫자 더하기 (0) | 2025.03.17 |
[프로그래머스/파이썬] 음양 더하기 (0) | 2025.03.17 |