
Problem ๐ป
https://school.programmers.co.kr/learn/courses/30/lessons/120816
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์ ์ค๋ช
๋จธ์ฑ์ด๋ค ํผ์๊ฐ๊ฒ๋ ํผ์๋ฅผ ๋ ์กฐ๊ฐ์์ ์ด ์กฐ๊ฐ๊น์ง ์ํ๋ ์กฐ๊ฐ ์๋ก ์๋ผ์ค๋๋ค. ํผ์ ์กฐ๊ฐ ์ slice์ ํผ์๋ฅผ ๋จน๋ ์ฌ๋์ ์ n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, n๋ช ์ ์ฌ๋์ด ์ต์ ํ ์กฐ๊ฐ ์ด์ ํผ์๋ฅผ ๋จน์ผ๋ ค๋ฉด ์ต์ ๋ช ํ์ ํผ์๋ฅผ ์์ผ์ผ ํ๋์ง๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด๋ณด์ธ์.
์ ํ์ฌํญ
- 2 ≤ slice ≤ 10
- 1 ≤ n ≤ 100
์ ์ถ๋ ฅ ์slicenresult
| 7 | 10 | 2 |
| 4 | 12 | 3 |
Approach 1 โ - ๋์ ์ด๊ธฐ ์ ๊ทผ๋ฒ
class Solution {
public int solution(int slice, int n) {
// slice์ n๊ณผ์ ์ต์๊ณต๋ฐฐ์ ๊ตฌํ๊ธฐ
// slice๋ฅผ 2์์ 10๊น์ง ์ ํ์ ์ด๋ป๊ฒ ๋ฌ์ผ ํ์ง?
int gcd = gcd(slice, n);
int lcd = slice * n / gcd;
return lcd/slice;
}
pulbic static int gcd (int a, int b) {
if (b == 0){return a};
return gcd(b, a%b);
}
}
Approach 2 โญ - ๋์ ์ ๊ทผ๋ฒ์ ๋ํ ๊ต์
๋ฌธ์ ์ 1: ๋ฌธ์ ์ ์๊ตฌ ์ฌํญ์ ํ์ ํ์ง ๋ชปํจ.
• ๋ฌธ์ ๋ ์ต์ ๊ณต๋ฐฐ์(LCD)๋ฅผ ์ฐพ๋ ๊ฒ์ด ์๋๋ผ, n๋ช ์ ์ฌ๋์ด ์ต์ ํ ์กฐ๊ฐ ์ด์ ๋จน๊ธฐ ์ํด ๋ช ํ์ ํผ์๋ฅผ ์์ผ์ผ ํ๋์ง๋ฅผ ๊ณ์ฐํด์ผ ํ๋ค.
• ๊ทธ๋ฌ๋ ์ฝ๋์์๋ slice์ n์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ณ์ฐํ ๋ค, ์ด๋ฅผ ๋ค์ slice๋ก ๋๋๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์๋ค.
๋ฌธ์ ์ 2: gcd ๋ฉ์๋ ๊ตฌํ ์ค๋ฅ
• ์ฝ๋์์ gcd ๋ฉ์๋ ์ ์ธ์ด ์๋ชป๋์๋ค.
์คํ๋ก pulbic์ด๋ผ๊ณ ์ ์๋ค.
Solution ๐ก
๊ฐ์ ๋ฐฉ์: ์ฌ๋ฐ๋ฅธ ์ ๊ทผ๋ฒ์ผ๋ก ๋ฌธ์ ํด๊ฒฐ
๋ฌธ์ ์ ๋ณธ์ง์ ๋ค์๊ณผ ๊ฐ๋ค:
1. ํ ํ์ ํผ์์์ slice ๋งํผ ์กฐ๊ฐ์ ์ ๊ณต.
2. n๋ช ์ด ์ต์ ํ ์กฐ๊ฐ์ฉ ๋จน์ผ๋ ค๋ฉด ํ์ํ ์ด ์กฐ๊ฐ ์๋ n์ด๋ค.
3. ํผ์๋ฅผ ๋ช ํ ์์ผ์ผ ํ๋์ง๋ฅผ ๊ตฌํ๋ ค๋ฉด, ์ด ํ์ํ ์กฐ๊ฐ ์ n์ ํ ํ์์ ์ ๊ณตํ ์ ์๋ ์กฐ๊ฐ ์ slice๋ก ๋๋๊ณ , ๋๋จธ์ง๊ฐ ์์ผ๋ฉด ํ ํ์ ๋ ์ถ๊ฐํด์ผ ํ๋ค.
์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค:
class Solution {
public int solution(int slice, int n) {
// ํ ์ฌ๋๋น ์ต์ ํ ์กฐ๊ฐ์ ๋จน๊ธฐ ์ํด ํ์ํ ํผ์ ํ ์ ๊ณ์ฐ
return (n + slice -1) / slice; // ์ฌ๋ฆผ ์ฒ๋ฆฌ
}
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.solution(7, 10)); //์ถ๋ ฅ: 2
System.out.println(solution.solution(4, 12)); //์ถ๋ ฅ: 3
}
}
์ฝ๋ ์ค๋ช
1. (n + slice - 1) / slice๋ ์ฌ๋ฆผ(ceiling)์ ๊ตฌํํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด๋ค.
• ์: n=10, slice=7์ธ ๊ฒฝ์ฐ:
• n / slice๋ 10 / 7 = 1.428๋ก 1์ด์ง๋ง, ์ฌ๋ฆผ ์ฒ๋ฆฌ๋ก 2๊ฐ ๋์ด์ผ ํ๋ค.
• (n + slice - 1) / slice๋ (10 + 7 - 1) / 7 = 16 / 7 = 2๊ฐ ๋๋ค.
• ์ด ๋ฐฉ๋ฒ์ ๋๋จธ์ง๊ฐ ์๋ ๊ฒฝ์ฐ ํ ํ์ ์ถ๊ฐํ๋ ํจ๊ณผ๋ฅผ ์ค๋ค.
2. ๋ณ๋๋ก ์ต์๊ณต๋ฐฐ์๋ ์ต๋๊ณต์ฝ์๋ฅผ ๊ณ์ฐํ ํ์๊ฐ ์๋ค. ๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ฒ์ ๋จ์ํ ๋๋์ ๊ณผ ์ฌ๋ฆผ ์ฒ๋ฆฌ์ด๋ค.
์ ๋ฌธ์ ์์๋ slice๋ฅผ 2~10์ผ๋ก ์ ํ์ ๋์๋๋ฐ ์ฝ๋์์๋ ์ด ์ ํ์ ๋๋ ์ฝ๋๊ฐ ์๋๊ฑธ๊น?
์ค์ ์ฝ๋์ ๊ฒ์ฆ ๋ก์ง์ด ๋น ์ ธ์์ด์ ๊ทธ๋ ๋ค.
* ์ ์ ํ์ ๋ช ์ํด์ผ ํ๋๊ฐ? *
1. ์ ๋ ฅ๊ฐ ๊ฒ์ฆ
๋ฌธ์ ์์ slice์ ๋ฒ์๋ฅผ 2 ~ 10์ผ๋ก ์ ํํ์ผ๋ฏ๋ก, ์ ๋ ฅ๊ฐ์ด ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ์๋ํ์ง ์์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ค.
2. ์์ ํ ์ฝ๋ ์์ฑ
์ค์ ์ด์ ํ๊ฒฝ์์๋ ์ ๋ ฅ๊ฐ์ด ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์, ํญ์ ์ ๋ ฅ๊ฐ์ ๊ฒ์ฆํ์ฌ ์ฝ๋์ ์์ ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ด ์ค์ํ๋ค.
class Solution { public int solution(int slice, int n) { // slice ๊ฐ ๊ฒ์ฆ if (slice < 2 || slice > 10) { throw new IllegalArgumentException("slice๋ 2 ์ด์ 10 ์ดํ์ ๊ฐ์ด์ด์ผ ํ๋ค."); } //ํ์ํ ํผ์ ํ ์ ๊ณ์ฐ return (n + slice -1) /slice ; // ์ฌ๋ฆผ ๊ณ์ฐ } public static void main(String[] args) { Solution solution = new Solution(); // ์ ์ ์ผ์ด์ค System.out.println(solution.solution(7, 10)); // ์ถ๋ ฅ: 2 System.out.println(solution.solution(4, 12)); // ์ถ๋ ฅ: 3 // ์์ธ ์ผ์ด์ค try { System.out.println(solution.solution(1, 10)); // ์์ธ ๋ฐ์ } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); // ์ถ๋ ฅ: slice๋ 2 ์ด์ 10 ์ดํ์ ๊ฐ์ด์ด์ผ ํฉ๋๋ค. } } }โ- ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ
if (slice < 2 || slice > 10)๋ฅผ ํตํด slice๊ฐ 2 ๋ฏธ๋ง์ด๊ฑฐ๋ 10 ์ด๊ณผ์ผ ๊ฒฝ์ฐ ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
• IllegalArgumentException์ ์๋ชป๋ ์ ๋ ฅ๊ฐ์ ๋ํด ์ฝ๋๊ฐ ์ค๋จ๋๊ณ , ์ ์ ํ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋๋ก ํ๋ค.
- ๋ฌธ์ ํด๊ฒฐ ๋ก์ง ์ ์ง
๊ฒ์ฆ ๋ก์ง ์ดํ ๊ธฐ์กด์ ๊ณ์ฐ ๋ฐฉ์์ ์ ์งํ๋ฏ๋ก, slice ๊ฐ์ด ์ฌ๋ฐ๋ฅผ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ์ ์์ ์ผ๋ก ํด๊ฒฐํ๋ค.
Reference ๐
[Java] ํผ์ ๋๋ ๋จน๊ธฐ(1)_ ๋ชซ๊ณผ ๋๋จธ์ง์ ๋ํ ๊ทผ๋ณธ์ ์ธ ์๋ฆฌ ์ฌ์ฉ
Problem ๐ปhttps://school.programmers.co.kr/learn/courses/30/lessons/120814๋ฌธ์ ์ค๋ช ๋จธ์ฑ์ด๋ค ํผ์๊ฐ๊ฒ๋ ํผ์๋ฅผ ์ผ๊ณฑ ์กฐ๊ฐ์ผ๋ก ์๋ผ ์ค๋๋ค. ํผ์๋ฅผ ๋๋ ๋จน์ ์ฌ๋์ ์ n์ด ์ฃผ์ด์ง ๋, ๋ชจ๋ ์ฌ๋์ด ํผ์๋ฅผ ํ
yeonbikim.tistory.com
์ ๋ฌธ์ ์ ์ด๋ค ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ด ์์๊น?
๊ณตํต์
1. ๊ธฐ๋ณธ ๋ฌธ์ ๊ตฌ์กฐ
๋ ๋ฌธ์ ๋ชจ๋ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํผ์์ ์ต์ ๊ฐ์๋ฅผ ๊ณ์ฐํ๋ ๋ฌธ์ ์ด๋ค.
ํผ์๋ฅผ ์ผ์ ํ ์กฐ๊ฐ ์๋ก ๋๋๊ณ , ๋ชจ๋ ์ฌ๋์ด ์ต์ ํ ์กฐ๊ฐ ์ด์ ๋จน์ ์ ์๋๋ก ๊ณ์ฐํ๋ ์ ์์ ๋์ผํ๋ค.
2. ์ํ์ ์ ๊ทผ ๋ฐฉ์
๋ ๋ฌธ์ ๋ชจ๋ ํ์ํ ์กฐ๊ฐ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํผ์ ํ ์๋ฅผ ๊ณ์ฐํ๋ฉฐ, ํ์ํ ์กฐ๊ฐ ์๋ฅผ ํ ํ์ ์กฐ๊ฐ ์๋ก ๋๋๊ณ ์ฌ๋ฆผ(ceil) ์ฒ๋ฆฌ๋ฅผ ํตํด ํด๊ฒฐ๋๋ค.
3. ์ ํ ์กฐ๊ฑด
๋ ๋ฌธ์ ๋ชจ๋ ์ ๋ ฅ๊ฐ์ ๋ฒ์๊ฐ ์์, ๋จ์ํ ์ ์ ์ฐ์ฐ์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
์ฐจ์ด์
1. ํผ์์ ์กฐ๊ฐ ์
• ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ ํผ์์ ์กฐ๊ฐ ์ slice๊ฐ ๋ณ์๋ก ์ ๊ณต๋๋ฉฐ, 2 ~ 10 ์ฌ์ด์ ๊ฐ์ผ๋ก ๋์ ์ผ๋ก ์ค์ ํ ์ ์๋ค.
• ๋ ๋ฒ์งธ ๋ฌธ์ ๋ ํผ์์ ์กฐ๊ฐ ์๊ฐ ํญ์ 7์กฐ๊ฐ์ผ๋ก ๊ณ ์ ๋์ด ์๋ค.
2. ๋งค๊ฐ๋ณ์
• ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ solution(int slice, int n)์ ๊ฐ์ด ์กฐ๊ฐ ์(slice)์ ์ธ์ ์(n) ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋๋ค.
• ๋ ๋ฒ์งธ ๋ฌธ์ ๋ solution(int n)์ ๊ฐ์ด ์ธ์ ์(n) ํ๋๋ง ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค.
3. ๋ฌธ์ ์ ์ผ๋ฐ์ฑ๊ณผ ํน์์ฑ
• ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ ํผ์ ์กฐ๊ฐ ์๋ฅผ ๋ค์ํ๊ฒ ์ค์ ํ ์ ์์ด ์ผ๋ฐ์ ์ธ ์ํฉ์ ๋ค๋ฃจ๋ ๋ฌธ์ ์ด๋ค.
• ๋ ๋ฒ์งธ ๋ฌธ์ ๋ ํผ์ ์กฐ๊ฐ ์๊ฐ ๊ณ ์ ๋์ด ์์ผ๋ฏ๋ก ํน์ ํ ์ํฉ์ ๋ค๋ฃจ๋ ๋ฌธ์ ์ด๋ค.
4. ์ฝ๋์ ๊ฐ๊ฒฐํจ
• ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ slice๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์์ผ ํ๋ฏ๋ก ์ฝ๋๊ฐ ์ฝ๊ฐ ๋ ๋ณต์กํ๋ค.
• ๋ ๋ฒ์งธ ๋ฌธ์ ๋ slice = 7์ด ๊ณ ์ ๋์ด ์์ด ์ฝ๋๊ฐ ๋ ๊ฐ๋จํ๋ค.
๋ ๋ฌธ์ ์ ์ฝ๋ ๋น๊ต
์ฒซ ๋ฒ์งธ ๋ฌธ์
class Solution {
public int solution(int slice, int n) {
return (n + slice -1) / slice; // ์ฌ๋ฆผ ๊ณ์ฐ
}
}
๋ ๋ฒ์งธ ๋ฌธ์
class Solution {
public int solution(int n) {
int slice = 7;
return (n + slice -1) / slice; //์ฌ๋ฆผ ๊ณ์ฐ
}
}