목차
연속된 '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에 저장을 하였다.
나의 코드와 원리는 같지만 더욱 코드상으로 깔끔한것 같다.
나도 좋은 코드를 위해 로직 작성후 정답이 도출되더라도 더 코드를 깔끔하게 짤수 있는지 검토해보아야겠다.
'코딩테스트[파이썬] > 입문자를 위한 코딩테스트 핵심' 카테고리의 다른 글
[배열과 연결리스트와 덱] - 중복제거- (0) | 2024.01.22 |
---|---|
[배열과 연결리스트와덱] -수열의회전 (0) | 2024.01.22 |
[배열과 연결리스트와 덱] -합격생 (0) | 2024.01.22 |
[배열과 연결리스트와 덱]-최솟값의 위치 (0) | 2024.01.22 |
배열과 연결리스트, 덱(deque) 자료구조 (0) | 2024.01.22 |