코딩테스트[파이썬]/입문자를 위한 코딩테스트 핵심

[배열과 연결리스트와 덱] -연속된 1의 길이

softmoca__ 2024. 1. 22. 11:44
목차

연속된 '1'의 길이

매개변수 nums에 0과 1로된 수열이 주어지면 1이 연속된 부분수열 중 가장 긴 부분수열의 길 이를 반환하는 프로그램을 작성하세요.

 

제한사항:
• nums의 길이 3 <= n <= 100,000

 

 

나의코드

def solution(nums):
    answer = 0
    countt=0
    M=0
    for x in nums:
        if x==1:
            countt+=1
            M=countt
        elif x==0:
            countt=0
        if M>answer:
           answer=M
    return answer

print(solution([1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]))
print(solution([0, 0, 1, 0, 1, 0, 0]))
print(solution([1, 1, 1, 1, 1]))
print(solution([1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1]))

 1의 갯수를 카운팅하기 위한 countt 변수와 연속된 1이 끝난 후 그 전까지의 최대 1의길이를 저장하는 M 사용.

 

 정답코드

def solution(nums):
    answer = 0
    cnt = 0
    for x in nums:
        if x == 1:
            cnt += 1
        else:
            answer = max(answer, cnt)
            cnt = 0
    answer = max(answer, cnt)
    return answer

print(solution([1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]))
print(solution([0, 0, 1, 0, 1, 0, 0]))
print(solution([1, 1, 1, 1, 1]))
print(solution([1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1]))

 정답 코드에서는 최대 길이를 따로 저장하지 않고 하나의 원소를 확인할 때마다 최댓값을 answer에 저장을 하였다.

나의 코드와 원리는 같지만 더욱 코드상으로 깔끔한것 같다.

나도 좋은 코드를 위해 로직 작성후 정답이 도출되더라도 더 코드를 깔끔하게 짤수 있는지 검토해보아야겠다.