해결된 질문
작성
·
90
0
몇 챕터/몇 강을 수강 중이신가요?
1-11
def find_count_to_turn_out_to_all_zero_or_all_one(string):
# string을 순회하면서 0과 1의 연속된 덩어리 개수를 구함
# 그 개수중 min을 return
zero_seq = 0
one_seq = 0
prev_num = string[0]
# 첫 bit 초기화
if string[0] == "0":
zero_seq += 1
else:
one_seq += 1
# 2번째 bit부터 마지막까지 순회
for bit in string[1:]:
if bit != prev_num:
if bit == "0":
zero_seq += 1
else:
one_seq += 1
prev_num = bit
min_count = min(zero_seq, one_seq)
return min_count
result = find_count_to_turn_out_to_all_zero_or_all_one(input)
print(result)
안녕하세요!
1주차 숙제 중 문자열 뒤집기 문제를 풀면서 궁금한 점이 있어 질문 남깁니다.
저는 풀이가 위 코드와 같이 나왔는데, 정답 코드랑 비교했을때 살짝 다르더라구요.
출력은 잘 나오는 것 같은데, 정확한 차이가 궁금합니다.
저는 현재 bit를 이전 bit와 비교하고, 강사님은 현재 bit를 다음 bit와 비교하는 방식의 차이일까요?
아니면 제 풀이에 문제가 있을까요?
답변 1
1
안녕하세요 qkrwlsn102109님!! 좋은 질문 감사합니다!!
결론부터 말하면, 제시해주신 코드도 완전히 정확합니다!
제가 작성한 코드는 현재 문자와 다음 문자를 비교하는 방식입니다! 그리고 변화가 일어나는 지점에서 "다음 문자"가 무엇인지 확인합니다. 이 때, 첫 번째 문자는 별도로 처리하도록 되어있습니다!
그리고 qkr님께서 제시해주신 코드는 현재 문자와 이전 문자를 비교하는 방식입니다! 이때, 변화가 일어나는 지점에서 "현재 문자"가 무엇인지 확인하는 것이 다릅니다. 마찬가지로 첫 번째 문자는 별도로 처리하도록 되어있구요
즉, 연속된 구간의 개수를 세는 방식이 다를 뿐, 본질적으로는 동일한 로직입니다!
예시로 "011110"을 보면:
0구간: 1개 (맨 앞의 0)
1구간: 1개 (가운데 1111)
0구간: 1개 (맨 뒤의 0)
총 3개 구간이고, 0구간 2개, 1구간 1개이므로 min(2,1) = 1이 나오게 되어있습니다.
두 방법 모두 올바른 풀이방법이니까 안심하세요! 본인이 더 이해하기 쉬운 방식으로 구현하신 거라 오히려 좋다고 생각합니다 새로운 방법으로 시도해보시는 모습 넘넘 좋습니다!! 언제든 질문 편하게 올려주세요 ㅎㅎ