
Problem ๐ป
https://school.programmers.co.kr/learn/courses/30/lessons/87389
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์ ์ค๋ช
์์ฐ์ n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. n์ x๋ก ๋๋ ๋๋จธ์ง๊ฐ 1์ด ๋๋๋ก ํ๋ ๊ฐ์ฅ ์์ ์์ฐ์ x๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ๋ต์ด ํญ์ ์กด์ฌํจ์ ์ฆ๋ช ๋ ์ ์์ต๋๋ค.
์ ํ์ฌํญ
- 3 ≤ n ≤ 1,000,000
์ ์ถ๋ ฅ ์nresult
| 10 | 3 |
| 12 | 11 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- 10์ 3์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ 1์ด๊ณ , 3๋ณด๋ค ์์ ์์ฐ์ ์ค์์ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์๊ฐ ์์ผ๋ฏ๋ก, 3์ return ํด์ผ ํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2
- 12๋ฅผ 11๋ก ๋๋ ๋๋จธ์ง๊ฐ 1์ด๊ณ , 11๋ณด๋ค ์์ ์์ฐ์ ์ค์์ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์๊ฐ ์์ผ๋ฏ๋ก, 11์ return ํด์ผ ํฉ๋๋ค.
Approach 2 โญ - ๋ ผ๋ฆฌ์ ์ ๊ทผ๋ฒ
๋ฌธ์ ์์ฝ :
์์ฐ์ n์ x๋ก ๋๋ด์ ๋ ๋๋จธ์ง๊ฐ 1์ด ๋๋ ๊ฐ์ฅ ์์ ์์ฐ์ x๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ํด๊ฒฐ์ ์ํ ํต์ฌ ๊ฐ๋ :
1. ๋๋จธ์ง ์ฐ์ฐ์ ์ ์ :
์ n์ x๋ก ๋๋์์ ๋, n % x =1์ ๋ง์กฑํ๋ ๊ฐ์ฅ ์์ x๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค.
2. ์กฐ๊ฑด ๋ถ์ :
n%n=1์ด ์ฑ๋ฆฝํ๋ ค๋ฉด n์์ 1์ ๋บ ๊ฐ์ด x๋ก ๋๋์ด๋จ์ด์ ธ์ผ ํ๋ค.
์ฆ,n-1x
๋ฐ๋ผ์ x๋ n-1์ ์ฝ์์ค์์ 1๋ณด๋ค ํฐ ๊ฐ์ฅ ์์ ์์ฐ์์ด๋ค.
์๋ฅผ ๋ค์ด 10์ 3์ผ๋ก ๋๋๋ฉด ๋ชซ์ด 3์ด๊ณ ๋๋จธ์ง๊ฐ 1์ด๋ค.
10 = 3*3+1
๋๋จธ์ง๋ ์ซ์๋ฅผ ๋๋ด์ ๋ ๋ฑ ๋จ์ด์ง์ง ์๊ณ ๋จ๋ ๋ถ๋ถ์ด๋ค.๊ทธ๋์ n-1 = y * xx๊ฐ 1์ด๋ฉด ๋๋จธ์ง๋ 0์ด๋ฏ๋ก x๋ 2 ์ด์์ด๋ค.
3. ๋ฒ์์ ์ ํ :
x๋ ์์ฐ์์ด๋ฏ๋ก x>= 1์ด์ด์ผ ํ๋ค.
x=1์ผ๋ n%n=0์ด๋ฏ๋ก, ์กฐ๊ฑด์ ๋ง์กฑํ๋ ค๋ฉด x >=2๋ถํฐ ์์ํ๋ค.
๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
1. ์ํ์ ์ ๊ทผ :
n-1์ ๊ตฌํ๋ค.
n-1์ ์ฝ์๋ฅผ ๊ตฌํ๋ฉด์ x >=2์ธ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ๋๋ค.
2. ํจ์จ์ ๋ฐ๋ณต :
x๋ฅผ 2๋ถํฐ ์์ํ์ฌ n%n=1์ด ๋๋ x๋ฅผ ์ฐพ๋๋ค.
x๊ฐ n-1์ ์ฝ์์์ ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ ๊ฐ๋ฅํ๋ค.
x๋ฅผ 2๋ถํฐ ์ฐจ๋ก๋ก 1์ฉ ๋๋ ค๊ฐ๋๊น ๋๋จธ์ง๊ฐ 1์ด ๋๋ ์๊ฐ์ x๊ฐ ์ต์๊ฐ์ด๋ค.
๋ ผ๋ฆฌ ๋จ๊ณ๋ณ ์ค๋ช
1. ์ ๋ ฅ ํ์ธ :
์์ฐ์ n์ด ์ฃผ์ด์ง๋ค.
2. ๋ฐ๋ณต๋ฌธ์ผ๋ก ์กฐ๊ฑด ํ์ธ :
x๋ฅผ 2๋ถํฐ n-1๊น์ง ๋ฐ๋ณตํ๋ค.
n%n=1์ธ ๊ฒฝ์ฐ x๋ฅผ ๋ฐํํ๋ค.
x๋ฅผ 2๋ถํฐ ํ๋์ฉ ๋ํด ๋ณด๋ฉด์ n%x=1์ด ๋๋์ง ํ์ธํ๋ค.
3.์ถ๋ ฅ :
ํญ์ ๋ต์ด ์กด์ฌํ๋ฏ๋ก, ๋ฐ๋ณต๋ฌธ ์์์ ์กฐ๊ฑด์ด ๋ง์กฑ๋๋ ์ฆ์ x๋ฅผ ๋ฐํํ๋ค.
์ซ์ n-1์ ํญ์ ์กด์ฌํ๊ณ , x๋ n-1์ ์ฝ์ ์ค ํ๋์ผ ์ ๋ฐ์ ์๋ค.
Solution ๐ก
public class Solution {
public int solution(int n) {
// x๋ 1๋ถํฐ ์์ํ์ฌ n์ x๋ก ๋๋ ๋๋จธ์ง๊ฐ 1์ธ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋๋ค.
for (int x = 1; x < n; x++) {
if (n % x == 1) {
return x; //์กฐ๊ฑด์ ๋ง์กฑํ๋ x๋ฅผ ๋ฐํํ๋ค.
}
}
return -1 // ๋ต์ด ํญ์ ์กด์ฌํ๋ฏ๋ก ์ด ์ฝ๋๋ ์คํ๋์ง ์๋๋ค.
}
}