본문 바로가기

Skill Sets/Python

[Python] 나머지가 1이 되는 수 찾기(프로그래머스/python/Level 1)

SMALL

안녕하세요! 데코입니다!

 

오늘은 프로그래머스 코딩테스트 연습에 있는 "나머지가 1이 되는 수 찾기" 문제를 포스팅하려고 합니다!

 

바로 포스팅 시작할게요! :)

(출처 : https://school.programmers.co.kr/learn/courses/30/lessons/87389)

 


 

1. 문제 :  평균 구하기(Lv. 1)


 

2. 문제 설명

 

자연수 n이 매개변수로 주어집니다.

n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요.

답이 항상 존재함은 증명될 수 있습니다.

 

[ 제한 사항 ]

 

3 ≤ n ≤ 1,000,000

 

[ 입출력 예 ]

 

n result
10 3
12 11

 

입출력 예 #1

10을 3으로 나눈 나머지가 1이고,3보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 3을 return 해야 합니다.

 

입출력 예 #2

12를 11로 나눈 나머지가 1이고, 11보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 11을 return 해야 합니다

 


 

3. 문제 풀이

# 1안
def solution(n):
    i_list = []
    for i in range(1,n+1):
        if n%i == 1:
            i_list.append(i)
    answer = min(i_list)
    return answer

# 2안
def solution(n):
    i_list = []
    for i in range(1,n+1):
        if n%i == 1:
            answer = i
            break
    return answer

문제 설명에 맞는 코드를 작성하기 위해서 두 가지 방법으로 풀어보았어요!

 

#  1안 풀이 설명

# [ 문제 풀이 설명 ]

 

1안은 1부터 n사이의 수를 반복문을 통해 직접 나눠주고

 

나머지가 1인 숫자들을 i_list라는 배열에 저장해주었어요!

 

반복문이 완료 된 이후에 i_list 배열에 담긴 숫자중 가장 작은 값을 min() 함수를 이용하여 구했어요!

 

이를 answer 변수에 할당해주어서 return 해주었습니다!

 

n = 10을 예로 들어볼게요!

 

10 나누기 1의 나머지 = 0

10 나누기 2의 나머지 = 0

10 나누기 3의 나머지 = 1 > i_list에 추가

10 나누기 4의 나머지 = 2

10 나누기 5의 나머지 = 0

10 나누기 6의 나머지 = 4

10 나누기 7의 나머지 = 3

10 나누기 8의 나머지 = 2

10 나누기 9의 나머지 = 1 > i_list에 추가

 

i_list = [3, 9]

 

[3, 9] 중 작은 값인 3을 answer 변수에 할당하고 return 해주었습니다!

 

# 1안

def solution(n):
    # 나머지가 1인 숫자를 담을 i_list를 선언
    i_list = []
    # 1부터 n까지 반복문을 실행
    for i in range(1,n+1):
        # n을 i로 나눠 나머지가 1인 값을 판별 후 i_list에 추가
        if n%i == 1:
            i_list.append(i)
     # i_list에 있는 숫자중 가장 작은 값을 answer 변수에 할당
    answer = min(i_list)
    return answer

 

#  2안 풀이 설명

# [ 문제 풀이 설명 ]

 

1안의 코드를 통해 문제를 푼 이후에

 

생각을 해보니까 

 

가장 작은 값만을 구하면 되는 문제에서, n번 반복문의 값을 다 실행하는 것이 비효율적이라고 생각했어요!

 

따라서 2안은  for 반복문을 이용해서 1부터 n의 숫자만큼 실행을 반복해주지만

 

나머지가 1인 것을 발견하면 이를 answer라는 변수에 할당해주고

 

반복문을 break를 통해 빠져 나오도록 설계했습니다!

(for문이 아닌 while 문으로 해도 동일한 결과가 나오겠네요!)

 

n = 10을 예로 들어볼게요!

 

10 나누기 1의 나머지 = 0

10 나누기 2의 나머지 = 0

10 나누기 3의 나머지 = 1 > answer에 할당

 

break로 반복문 종료

 

이를 answer 변수에 할당하고 return 해주었습니다!

 

# 2안

def solution(n):
    # 1부터 n까지 반복문을 실행
    for i in range(1,n+1):
        # n을 i로 나눠 나머지가 1인 값을 판별
        if n%i == 1:
            #  i를 answer에 할당
            answer = i
            # break를 이용하여 반복문 종료
            break
    return answer

 

 

정답...!

 


 

4. 문제 풀이 후기

 

이번에는 자연수 n이 주어졌을때 n을 x로 나눈 나머지가 1이되는

 

가장 작은 자연수 x를 구하는 문제였습니다!

 

x는 1과 n 사이에 있는 값이라는 것을 이용하면

 

금방 코드를 짤 수 있었습니다!

 

이 외에는 아직은 level 1 문제이다보니 어려운 부분이 없어서 제가 따로 코멘트할 것은 없습니다!

 

 



이번 포스팅은 프로그래머스에 있는

 

python을 이용한 코딩테스트 문제를 풀어보았습니다!

 

앞으로도 sql 뿐만 아니라 python을 이용한 코딩테스트도 포스팅을 하려고 합니다!

 

설명이 어려운 부분 혹은 잘 이해가 안 가는 부분

그리고 더 궁금한 내용이 있다면

언제든지 댓글로 남겨주세요!

빠르게 궁금증을 해결해 드릴게요!

공감과 댓글은 큰 힘이 됩니다!

오늘도 블로그 방문해 주시고

포스팅 읽어주셔서 감사합니다!

LIST