Q. 0๋ฒ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฒํธ ๋งค๊ฒจ์ง n๊ฐ์ ์์ ์ค ๋ค ๊ฐ๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํด๋ผ.
์๋ฅผ ๋ค์ด n์ด 5์ธ ๊ฒฝ์ฐ, 0~4๊น์ง์ ์์ ์ค ์ฐจ๋ก๋ก ๋ค ๊ฐ๋ฅผ ๊ณ ๋ฅด๋ฏ๋ก (0 1 2 3), (0 1 2 4), (0 1 3 4), (0 2 3 4), (1 2 3 4)์ ๊ฒฝ์ฐ๊ฐ ์๋ค.
A1. ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
์ฐจ๋ก๋ก ๋ค ๊ฐ๋ฅผ ๊ณ ๋ฅด๋ฏ๋ก 4์ค ์ค์ฒฉ for๋ฌธ์ ์จ์ ํด๊ฒฐํ ์ ์๋ค.
class Test {
public static void main(String[] args) {
int n = 5; // n์ด 5์ธ ๊ฒฝ์ฐ 0~4๊น์ง ์์ ์ค ์ฐจ๋ก๋ก 4๊ฐ๋ฅผ ๊ณจ๋ผ ์ถ๋ ฅํจ
// ์ฒซ ๋ฒ์งธ ์์ ์ ํ
for (int i = 0; i < n; i++) {
// ๋ ๋ฒ์งธ ์์ ์ ํ (์ฐจ๋ก๋๋ก ๊ณ ๋ฅด๋ฏ๋ก ์ฒซ ๋ฒ์งธ ์์๋ณด๋ค ์ปค์ผ ํจ)
for (int j = i + 1; j < n; j++) {
// ์ธ ๋ฒ์งธ ์์ ์ ํ (์ฐจ๋ก๋๋ก ๊ณ ๋ฅด๋ฏ๋ก ๋ ๋ฒ์งธ ์์๋ณด๋ค ์ปค์ผ ํจ)
for (int k = j + 1; k < n; k++) {
// ๋ค ๋ฒ์งธ ์์ ์ ํ (์ฐจ๋ก๋๋ก ๊ณ ๋ฅด๋ฏ๋ก ์ธ ๋ฒ์งธ ์์๋ณด๋ค ์ปค์ผ ํจ)
for (int l = k + 1; l < n; l++) {
System.out.println("(" + i + ", " + j + ", " + k + ", " + l + ")");
}
}
}
}
}
}
ํ์ง๋ง ๊ณจ๋ผ์ผ ํ ์์์ ์๊ฐ ๋์ด๋๋ฉด ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ฌ๊ท๋ก ํธ์ถํ๋ ๋ฐฉ๋ฒ์ด ๋ ์ข์ ๋ต์์ด ๋ ๊ฒ์ด๋ค.
์ฌ๊ท๋ก ํจ์๋ฅผ ํธ์ถํ๋ ๋ก์ง์ ํ ๋ฒ์ ๋ ์ฌ๋ฆฌ๊ธฐ ์ด๋ ต๋ค๋ฉด ์ด๋ ๊ฒ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋จผ์ ์์ฑํด๋ณด๊ณ , ๋ฐ๋ณต๋๋ ๋ถ๋ถ์ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๋๋ก ๋ณ๊ฒฝํด๋ณด๋ ์ฐ์ต์ ํ๋ฉด ์๊ฐํด๋ด๊ธฐ ์ฝ๋ค.
A2. ์ฌ๊ท๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
์ฐจ๋ก๋๋ก ๊ณ ๋ฅผ ์ซ์๋ฅผ ์ด๋์๋ถํฐ ์ด๋๊น์ง ๊ณ ๋ฅผ์ง๋ฅผ ์ง์ ํด์ ๋ฐ๋ณต, ์์ ๋ค ๊ฐ๋ฅผ ์ ํํ๋๋ก ์ฌ๊ทํธ์ถํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ ์ ์๋ค.
import java.util.*;
class Test {
public static void main(String[] args) {
pick(5, new ArrayList<>(), 4);
}
// n: ์ ์ฒด ์์ ์
// pickedList: ์ง๊ธ๊น์ง ๊ณ ๋ฅธ ์์๋ค
// toPick: ๋ ๊ณ ๋ฅผ ์์ ์
public static void pick(int n, ArrayList<Integer> pickedList, int toPick) {
// ๋ค ๊ฐ๋ฅผ ๋ชจ๋ ๊ณจ๋์ ๊ฒฝ์ฐ ์ถ๋ ฅ ํ ์ฌ๊ท ํ์ถ
// (ํ์ง๋ง for๋ฌธ์ ์ํด ๊ณ์ ๋ฐ๋ณต์ ๋๋ฉฐ ์ฌ๊ทํจ์๋ฅผ ํ ๊ฒ)
if (toPick == 0) {
System.out.println(pickedList);
return;
}
// ๋ฐ๋ณต๋ฌธ์์ ์ด์ ์ ๊ณ ๋ฅธ ์ซ์ +1 ๋ถํฐ ๋ฐ๋ณต์ ๋์๋ฏ์ด
// ์ง์ ์ ๊ณ ๋ฅธ ์ซ์๋ณด๋ค 1ํฐ ์ซ์๋ถํฐ ๋ฐ๋ณต๋ฌธ ์์
int startNumber = 0;
if (pickedList.size() != 0) {
startNumber = pickedList.get(pickedList.size() - 1) + 1;
}
for (int i = startNumber; i < n; i++) {
pickedList.add(i); // ์์ ์ซ์๋ถํฐ ๋ฐ๋ณต์ ์์ํ์ฌ ๊ณ ๋ฅธ ์์ ๋ฆฌ์คํธ์ ๋ด์
pick(n, pickedList, toPick - 1); // ์์ ์์๋ถํฐ ์ฐจ๋ก๋ก ๋ด๋ ๊ณผ์ ์ ์ฌ๊ท๋ก ๋ฐ๋ณต
pickedList.remove(pickedList.size() - 1); // ๋ง์ง๋ง ์์๋ฅผ ์ง์ฐ๊ณ ๋ ๋ค์ ์ถ๊ฐ, ์ฌ๊ท ๋ฐ๋ณต
}
}
}
๊ฐ ํ๋ผ๋ฏธํฐ์ ์ญํ
- n: ์ ์ฒด ์์ ์ (์์ ์ฝ๋์์๋ 5๊ฐ๋ก 0~4๊น์ง์ ์ซ์)
์ง์ ์ ๊ณ ๋ฅธ ์ซ์์ 1์ ๋ํ ์์ ์์๊ฐ 1์ฉ ์ปค์ง๋ฉฐ ๋ฐ๋ณต๋ฌธ์ ๋ ๋ ์ต๋ ์ซ์๋ฅผ ๊ฒฐ์ ํ๋ค.
n์ด 6์ผ ๊ฒฝ์ฐ ๋ฒ์๊ฐ 0~5๊น์ง๋ก ๋์ด๋ ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
- pickedList: ์ง๊ธ๊น์ง ๊ณ ๋ฅธ ์์๋ค ๋ชฉ๋ก (์์ ์ฝ๋์์๋ ์์ ์ 0๊ฐ, ์ข ๋ฃ ์ 4๊ฐ)
- toPick: ๋ ๊ณจ๋ผ์ผ ํ ์์ ์ (์์ ์ 4๊ฐ, ์ข ๋ฃ ์ 0๊ฐ)
๊ฐ์ฅ ์์ ์ซ์๋ถํฐ ์์ํด 1์ฉ ์ปค์ง๋ฉด์ ๋ชฉ๋ก์ ์์๊ฐ ๋ด๊ธฐ๊ณ , ๋ ๊ณจ๋ผ์ผ ํ ์์ ์์ธ toPick์ด 0์ด ๋ ๋ pickedList๋ 4๊ฐ ๋๋ค.
๋งจ ์ฒ์๋ถํฐ ์์ํด๋ณด๋ฉด ์๋ฌด ๊ฒ๋ ๋ด๊ฒจ์์ง ์์ ๋ ํ๋ผ๋ฏธํฐ ์์๋ก ์๋์ ๊ฐ์ด ๋์ํ๋ฉฐ ๋ ๊ณจ๋ผ์ผ ํ ์์ ์๊ฐ 0์ด ๋ ๋ ์ถ๋ ฅํ๊ณ ์ค๋จํ๋ค.
(5, [0], 3) → (5, [0, 1], 2) → (5, [0, 1, 2], 1) → (5, [0, 1, 2], 0)
์ดํ ๋ชฉ๋ก์ ๋ด๊ธด ๋ง์ง๋ง ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ ๋ค์์ผ๋ก ์์ ์ซ์๋ฅผ ์ฐพ๋๋ค. ๋ง์ง๋ง ์์๋ฅผ ์ง์์ฃผ์ง ์๊ณ ํด๋น ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ์๋์ ๊ฐ์ ์คํ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
'๊ฐ๋ฐ > ์๋ฃ๊ตฌ์กฐ & ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ์ฑํ ๋ฐฉ (Java) (0) | 2021.10.24 |
---|---|
๋ก๋์ ์ต๊ณ ์์์ ์ต์ ์์ (Java) (0) | 2021.10.24 |
์ ๊ท ์์ด๋ ์ถ์ฒ (Java) (0) | 2021.10.24 |
์ฐฝ๊ณ ๋ค๊ฐํ (Java) (0) | 2021.10.21 |
1๋ถํฐ n๊น์ง์ ํฉ์ ๋ฐํํ๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2021.10.13 |
๋๊ธ