ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] Codility Lesson 8-1. Dominator
    공부/알고리즘 2021. 9. 7. 13:19

     

    한 두어번 제출하고 빠진 조건들 덕지덕지 붙은 포스팅 맨 아래 코드에서 큰 아쉬움을 느껴 dictionary를 활용해 작성해 보았다.

     

    1. cntDic 딕셔너리를 생성해주자, 그리고 for문을 돌면서 dictionary안에 A[i]가 있으면 += 1, 없다면 생성 해주자.

     

    2. cntDic[A[i]]가 전체 A의 절반보다 크면 그때의 index값을 return 해주자.

     

    3. for문이 끝나면 return -1

     

    훨씬 더 깔끔하고 예외에 대한 if 조건들이 많이 없어진거 같아 뿌듯하다.

     

    # you can write to stdout for debugging purposes, e.g.
    # print("this is a debug message")
    
    def solution(A):
        # write your code in Python 3.6
        cntDic = dict()
        for i in range(len(A)):
            if A[i] in cntDic:
                cntDic[A[i]] += 1
            else:
                cntDic[A[i]] = 1
            if cntDic[A[i]] > len(A)//2:
                return i
        return -1

     

     

     

    한 두어번 제출하고 빠진 조건들 덕지 덕지 붙여서 100% 통과한 아쉬운 코드이다.

     

    1. 얉은 복사를 통해 A를 B에 할당해주자, 그후 B를 sort해주자

     

    2. for문으로 B를 돌며 B[i] ^ B[i+1] 해주어 연속된 값이 같은지 확인해주고 같다면 domiCnt +=1

     

    3. 예외상황 domi가 중간에 끝날때, 마지막까지 간뒤 끝날때, 길이가 1일때 등등...

     

    여튼 이러한 예외가 많이 발생해서 if문으로 처리해주는건 뭔가 아름답지못하고 아쉽다.

     

     

    # you can write to stdout for debugging purposes, e.g.
    # print("this is a debug message")
    
    def solution(A):
        # write your code in Python 3.6
        B = A[:]
        B.sort()
        domiCnt = 0
        for i in range(len(B)-1):
            if B[i] ^ B[i+1] == 0:
                domiCnt += 1
                if i == len(B)-2:
                    return A.index(B[i])
            else:
                domiCnt +=1
                if domiCnt > len(B) // 2:
                    return A.index(B[i])
                domiCnt = 0
        if len(A) == 1:
            return 0
        else: return -1
    728x90

    댓글

Designed by Tistory.