-
[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'공부 > 알고리즘' 카테고리의 다른 글
[python] Codility Lesson 9-1. MaxProfit (0) 2021.09.08 [python] Codility Lesson 8-2. EquiLeader (0) 2021.09.08 [python] Codility Lesson 7-4. StoneWall (0) 2021.09.07 [python] Codility Lesson 7-3. Nesting (0) 2021.09.06 [python] Codility Lesson 7-2. Fish (0) 2021.09.03