https://school.programmers.co.kr/learn/courses/30/lessons/87389
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
* 나머지가 1이 되는 수 찾기 *
자연수 n이 매개변수로 주어집니다.
n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를
return 하도록 solution 함수를 완성해주세요.
답이 항상 존재함은 증명될 수 있습니다.
* 제한사항 *
3 ≤ n ≤ 1,000,000
자 문제부터 차근 차근 살펴 보고
문제의 핵심을 잘 찾아봅시다.
자연수 n이 매개변수로 주어지는 점
n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를
return 하도록 solution 함수를 완성해주세요.
답이 항상 존재함은 증명될 수 있습니다.
먼저 문제만 보았을 때 어떤게 필요한지 보이시나요?
우선적으로 문제에서 요구하는 것은 주어진 자연수 n을 x로 나누었을 때
나머지가 1이 되는 가장 작은 자연수 x를 찾는 것인데
이러한 작업은 반복적인 계산이 필요하겠죠?
특정 조건에 따라 결과를 반환하고 이를 위해 하나의 함수가 필요해요!
그리고 주어진 자연수 n을 2부터 시작해서 차례대로 x로 나누어 보면서
나머지가 1인지 확인해보아야 하겠죠?
이러한 반복적인 작업은 for 루프를 통해 처리가 가능하죠~
나머지가 1인 x를 찾았을 때 이를 확인하고, 해당 x를 반환해야 하니까
if 문을 사용하여 나머지가 1인지를 확인하고, 조건을 만족하면 해당 x를 반환해야겠죠!
그런데 우리는 제한사항도 꼼꼼히 살펴 보아야 해요!
주어진 문제의 제한사항은 다음과 같이 설명됩니다:
3 ≤ n ≤ 1,000,000은 주어진 자연수 n의 범위라는 걸 알 수 있어요.
n은 최소 3부터 최대 1,000,000까지의 자연수라는 뜻이며
함수의 입력으로 받을 수 있는 n의 범위를 제한하는 조건이 돼요.
이 제한사항은 주어진 자연수 n이 너무 작지 않고,
너무 크지도 않은 범위에서 문제를 풀어야 함을 의미하겠죠?
따라서
이 범위 내에서 적절한 알고리즘을 사용하여 문제를 해결 해 나아가야 한다는점!
만약 주어진 n의 범위를 벗어나는 입력이 들어온다면,
이를 처리하는 방법을 고려해야 하는데 주어진 문제에서는 이러한 경우를 고려하지 않고
최소 ' 3 ' 이상의 n에 대해서만 정상적인 입력이 들어온다고 가정하고 있어요!
그렇다면 우리는 로직을 어떻게 작성 해야하는지 알 수 있겠죠?!
가장먼저 정수 n을 매개변수로 받고, 정수를 반환해야 해요
func solution(_ n: Int) -> Int {
문제에서 요구한대로, n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 찾는 함수가 되죠
먼저 x를 2부터 n까지의 자연수로 순차적으로 반복하는 루프를 설정해줘야 해요.
for x in 2...n {
1로 나누는 것은 항상 나머지가 0이므로, x를 1부터 시작하지 않고 2부터 시작해야하죠.
다음으로 현재의 x로 n을 나눈 나머지가 1인지 확인해야 하는 코드를 작성해줘야 해요!
if n % x == 1 {
문제에서 요구한 조건을 만족하는지 검사하는 부분이 되겠죠?!
다음으로 만약 현재의 x가 n을 나누었을 때 나머지가 1이라면,
그 x를 반환하고 함수를 종료하도록 반환해주면 되겠죠!
return x
}
}
우리는 가장 작은 x를 찾는 것이므로, 나머지가 1인 첫 번째 x를 찾았을 때 그것이 답이 되니까요!
다음으로 만약 모든 x에 대해 조건을 만족하는 x가 없다면,
즉 n을 나누었을 때 나머지가 1인 x가 없다면,
문제에서 답이 항상 존재한다고 했으므로, 그냥 n을 반환하도록 로직을 작성 해주면 됩니다!
return n
}
주어진 n에 대해 함수를 호출하면, 가장 작은 x를 반환하게 됩니다.
그러므로 총 아래와 같은 코드가 되겠죠!
import Foundation
func solution(_ n: Int) -> Int {
for x in 2...n {
if n % x == 1 {
return x
}
}
return n // 제한사항에 의하면 항상 답이 존재
}
'IOS > Swift-Algorithm (Programmers)' 카테고리의 다른 글
[Swift] Programmers - 자연수 뒤집어 배열로 만들기 (0) | 2024.02.19 |
---|---|
[Swift] Programmers - x만큼 간격이 있는 n개의 숫자 (0) | 2024.02.19 |
[Swift] Programmers - 약수의 합 (0) | 2024.02.19 |
[Swift] Programmers - 자릿수 더하기 (0) | 2024.02.19 |
[Swift] Programmers - 평균 구하기 (0) | 2024.02.19 |