본문 바로가기
알고리즘 풀이/SW Expert Academy

[SWEA 9386] 연속한 1의 개수(python)

by char_lie 2023. 2. 12.
반응형

https://swexpertacademy.com/main/code/userProblem/userProblemDetail.do?contestProbId=AXALDUIq97oDFASI 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

연속한 1의 갯수 문제

각 케이스에 대해 연속된 1의 갯수가 가장 많은걸 찾으면 되는 간단한 문제

100% 내 생각으로 풀었는가?
→ O 

비교적 간단하게 해결한 문제이다.

내가 푼 정답 코드

T= int(input())
def max_case(n) :
    cnt = n[0]
    for i in range(len(n)) : 
        if cnt < n[i] :
            cnt = n[i]
    return cnt
 
for case in range(1,T+1) :
    N = int(input())
    x = list(input())
    temp = []
    cnt = 1
    for i in range(N) :
        if (x[0] != x[N-1]) or (x[0] == '0' and x[N-1] == '0') :
            if x[i-1] == '1' and x[i] == '1' :
                cnt += 1
                temp += [cnt]
            elif x[i-1] != x[i] :
                cnt = 1
            else :
                temp += [1]
    print(f'#{case} {max_case(temp)}')

경계조건 따져가면서 해결했는데 굳이 이렇게 안했어도 됐을것 같은 코드


느낀점

완전 알고리즘에 대해 잘 모를때 풀이로 낸 코드다 보니 굳이 이렇게 안짜도 될거 같은데? 싶은걸 경계조건 따져가면서 제출한 코드. 심지어 내장함수를 못쓰니까 내장함수까지 억지로 만들어주니 코드가 더 지저분해보이는거 같다.

다시 문제를 보니 더 간단하게 풀수 있었을거 같다.

T= int(input())
for case in range(1,T+1) :
    N = int(input())
    x = input().split('0')
    max_x = 0
    for i in x :
        if max_x < len(i):
        	max_x = len(i)
    print(f'#{case} {max_x}')

split 함수의 원리에 대해 더 자세히 알았다면 당시에도 이렇게 쉽게 구현했을 수 있을거 같은데 지금보니 아쉬움이 남는다! 더 열심히 해야지 😊

반응형

댓글