강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

qkrwlsn102109님의 프로필 이미지
qkrwlsn102109

작성한 질문수

38군데 합격 비법, 2025 코딩테스트 필수 알고리즘

1- 11. 1주차 끝 & 숙제 설명

문자열 뒤집기 문제 질문입니다!

해결된 질문

작성

·

90

0

1. 현재 학습 진도

  • 몇 챕터/몇 강을 수강 중이신가요?

    • 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이 나오게 되어있습니다.

두 방법 모두 올바른 풀이방법이니까 안심하세요! 본인이 더 이해하기 쉬운 방식으로 구현하신 거라 오히려 좋다고 생각합니다 새로운 방법으로 시도해보시는 모습 넘넘 좋습니다!! 언제든 질문 편하게 올려주세요 ㅎㅎ

qkrwlsn102109님의 프로필 이미지
qkrwlsn102109

작성한 질문수

질문하기