To Be Developer

[LeetCode] 136. Single Number 본문

알고리즘/LeetCode

[LeetCode] 136. Single Number

Jeff Hwang 2019. 3. 2. 22:28



class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        
        # input Data 는 비어 있지 않는 리스트 형태이다.
        # 리스트 안의 원소를 같은 것의 수를 카운트 한 후
        # 카운트 숫자가 한 개인 원소의 값을 리턴 시킨다.
        
        # input Data 가 [2, 2, 1] 이라고 가정하고 풀어보자
        
        
        # 각 숫자들의 정보를 집어 넣을 비어있는 리스트를 준비
        lst = []
        
        
        # 매개변수가 int를 원소로 가지고 있는 List 형태이다.
        # 매개변수 nums를 for 문으로 하나하나 원소를 꺼낸다.
        for i in nums:
            
            # 리스트 안의 원소를 카운트 할 것이기 때문에
            
            # keys = 'num' : 원소 값, 'cnt' : 'nums' 가 나온 횟수의 정보를 가지고 있는
            # dic 이라는 비어있는 딕셔너리 변수를 선언한다.
            dic = {'num' : None, 'cnt' : 0 }
            
            # 매개변수의 정보가 처음 나온 것인지 체크하기 위한 int 변수
            idLst = 0
            
            # 숫자들의 정보를 가지고 있는 lst를 for 문을 돌린다.
            for j in lst:
                # 만약 lst 안의 원소의 'num' key 가 i 라면
                # 원소의 'cnt'를 1 만큼 증가시킨다.
                # 1만큼 증가 되었으니 i 는 한 번이라도 나온 것인 것을 체크할 수 있게 되었다.
                if j['num'] == i:
                    j['cnt']+=1
                    idLst+=1
            # idLst 가 0 이면 처음으로 나온 숫자이기 때문에 i의 정보를 list에 append 시킨다.
            if idLst==0:
                dic['num'] = i
                dic['cnt'] +=1
                lst.append(dic)
        
        # 모든 nums 를 검수하였으니 그 결과 정보를 가지고 있는 lst를
        # 반복문으로 돌려 'cnt' 값이 1 인 'num' 을 반환시킨다.
        for i in lst:
            if i['cnt']== 1:
                return i['num']
            
if __name__== '__main__':
    nums = [2,2,1]
    s1 = Solution().singleNumber(nums)
    print(s1)