본문 바로가기
알고리즘 풀이

[algorithm] 페어 - 프로그래머스: 나머지가 1인 수, 없는 숫자 더하기

by 째깍단 2023. 5. 1.

답:  나머지가 1인 수 구하기

더보기
def solution(n):
    for x in range(1, n):
        if n % x == 1:
            return x

 

 

팀원들의 풀이

1)

def solution(n):
    result = 2

    while n%result != 1:
        if result > n/2:
            result = n-1
        else:
            result += 1

    return result

>> 가장 작은 자연수를 확인하는 것이므로 n을 나누어줄 숫자의 앞쪽 반을 먼저 계산하도록 함

 

 

2)

def solution(n):
    i = 2
    while (n-1) % i: i += 1
    return i

>> 나머지가 1이므로 n-1이 딱 맞아떨어지는 1를 계산하기

 

 

 

문제 분석 및 해석

 

자연수 n, n 나누었을때 1이되도록하는 가장 작은 자연수 x return 하는 함수 만들기

 

입력: n         10  12   

출력: result  3   11

 

 

1)생각한 풀이

n보다 작은 수의 배열로 나누어서

나머지가 1이 나오는 가장 작은 수 return

x가 n보다 작은 자연수들이 되어야함!

 

 

- 과정 -

 

for range를 쓰자!  1부터 차례대로  ~ n보다 1 작은 수까지.

 

def solution(n):
    for x in range(1, n):

 

% 연산자로 계산하여 나머지 1을 남겨 return  끝!

 

 

 


 

답: 없는 숫자 더하기

더보기
zerotonine = [0,1,2,3,4,5,6,7,8,9]

def solution(numbers):
    answer = list(set(zerotonine) - set(numbers))
    return sum(answer)

 

 

팀원들의 풀이

1)

def solution(numbers):
    answer = []
    for i in range(0, 10):
        if i not in numbers:
            answer.append(i)
    return sum(answer)

for 문으로 0~9까지를 불러오고, if 문으로 검사하여 answerlist를 더하기

 

1)-1

def solution(numbers):
    sum = 0
    for i in range(10):
        if i not in numbers:
            sum+=i  #여기서 바로 더해주기
    return sum

 

 

2) 

차집합 함수 difference 사용하기

앞에는 온전한 숫자 리스트를, difference의 인수로 비교할 리스트를 넣는다.

def solution(numbers):
    nums = set([0,1,2,3,4,5,6,7,8,9])
    a = nums.difference(numbers)
    answer = sum(a)
    return answer

 

 

 

문제 분석 및 해석

0~9 숫자 일부가 들어있는 배열 numbers

numbers 에서 찾을 없는 숫자를 찾아 더한 수를 return

입출력 :

numbers               result

[1,2,3,4,6,7,8,0]    14

[5,8,4,0,6,7,9]       6

 

1)생각한 풀이

온전한 list와 비교하면 좋겠는데...

교집합의 반대개념인 차집합!이 번뜩 생각났다.

 

 

- 과정 - 

set() 으로 집합으로 만들고 - 연산자로 비교하기

 

 

 

 

 

- 과정2 -  풀이중 미궁에 빠짐,, 내일 더 풀어봐야지

 

difference함수를 사용해 풀이하는 것을 발견!

 

원하셨던 풀이:

nums 리스트랑 numbers 중복되는 같은 값을

pop으로 빼서 a 담고 남겨진 numbers 리스트를 합치

** 이때 nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

 

이렇게 풀이하려면 일치하는 것을 찾아서 빼주는 방법이 필요한데...

 

pop()은 index를 값으로 받고, 넣지 않으면 맨 뒤에서부터 하나씩 빼주는 함수여서 적절하지 않다고 생각했다.

 

 pop() 대신 사용할 수 있는 함수를 생각해보았다.. remove?

 

def solution2(numbers):
    # a = zerotonine.difference(numbers).pop()

    c = []
    for n in numbers:
        a = zerotonine.remove(n)
        c.append(a)
    return c

print(solution2(numbers))

 

 

미궁에 빠졌다

 

뭔가 아래 블로그를 참고해서 풀 수 있을 거 같으니 우선 남겨두자/

참고해서 풀이하기 : 짝지어 제거하기

https://d-tail.tistory.com/72