BugDIARY

Programmers-배열 중복 제거, 약수 구하기 본문

IT/CodingTest

Programmers-배열 중복 제거, 약수 구하기

HEMON 2021. 9. 6. 16:38
# 배열 중복 제거하기

def solution(arr):
    answer = []

	# 배열 길이 만큼 for문을 실행
	for n in range(len(arr)-1):
    	
        # 배열의 앞 뒤를 비교하여 앞뒤가 다를 경우 answer배열에 값을 저장
    	if arr[n] != arr[n+1]:
    		answer.append(arr[n])

	# for문을 종료 후 arr의 제일 마지막 값도 append해줌.
    # 이유는 서로 앞 뒤를 비교할 경우 제일 마지막 값은 서로 다르더라도 저장되지 않기 때문.
    # 목적은 중복 제거이기 때문에, (1, 1, 2, 2)의 경우 마지막의 2, 2를 비교했을 때 2라는 값을 추가해야 하는데
    # 위의 if문 대로라면 앞의 값이 뒤에 값과 같아 저장되지 않기 때문에(2 != 2 가 False이기 때문에) 제일 마지막 값을 append해주는 것.
    
    answer.append(arr[len(arr)-1])

    return answer

# 약수구하기
def solution(left, right):
    answer = 0

	# for문을 이용해 left(시작값)부터 right+1(마지막 값)까지의 약수를 구한다.
    for number in range(left, right+1):
    	
        # 짝수, 홀수에 대한 판단을 하기 위해 cnt를 이용해 약수를 count한다.
        cnt = 0
        # 약수를 구하기 위한 for문. 1에서 주어진 값 까지 %연산자를 이용해 연산하며 0인 경우 약수이므로 cnt를 +1해준다.
        for n in range(1, number+1):
            if number % n == 0:
                cnt += 1
                
        # cnt를 2로 나누었을 때 나머지가 0이라면 짝수이므로 number숫자를 answer에 합한다.
        if cnt % 2 == 0:
            answer += number
        # cnt를 2로 나누었을 때 나머지가 1이라면 홀수이므로 number숫자를 answer에 뺀다.
        else:
        	answer -= number

    return answer

'IT > CodingTest' 카테고리의 다른 글

Programmers-숫자 문자열과 영단어  (0) 2021.09.01
Comments