
Problem ๐ป
์ ์๊ฐ ๋ค์ด ์๋ ๋ฐฐ์ด num_list๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. num_list์ ์์์ ์์๋ฅผ ๊ฑฐ๊พธ๋ก ๋ค์ง์ ๋ฐฐ์ด์ returnํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
https://school.programmers.co.kr/learn/courses/30/lessons/120821
Approach 1 โ - ๋์ ์ด๊ธฐ ์ ๊ทผ๋ฒ
1. ์์์ ์์๋ฅผ ์์์ผ ํ๋ค.
2. ๊ฐ ์์์ ์์๋ฅผ ๊ผด๋ฑ๋ถํฐ ์ฒซ๋ฒ์งธ๋ก ๋งค๊ฒจ์ผ ํ๋๋ฐ ๊ทธ๊ฒ์ ๋ํ ๋ฌธ๋ฒ์ ๋ชจ๋ฅธ๋ค.
Approach 2 โญ - ๋์ ์ ๊ทผ๋ฒ์ ๋ํ ์ ๊ฒ
์ฌ๋ฐ๋ฅธ ์ ๊ทผ๋ฒ์ด๋ฏ๋ก ์ด์ ์๋ฐ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ๋ง ์ตํ๋ฉด ๋๋ค!
<๋ฌธ์ ๋ถ์>
1. ํต์ฌ ์์
1) ๋ฐฐ์ด์ ์์๋ฅผ ๋ค์ง๋ ๊ฒ์ด ๋ชฉํ!
2) "๊ผด๋ฑ๋ถํฐ ์ฒซ ๋ฒ์งธ๋ก ๋งค๊ฒจ์ผ ํ๋ค"๋ ๊ฒ์ ๋ฐฐ์ด์ ๋ง์ง๋ง ์์๋ถํฐ ์ฐจ๋ก๋ก ์๋ก์ด ๋ฐฐ์ด์ ๋ฃ๋ ์์ ์ ์๋ฏธํ๋ค.
2. ํด๊ฒฐ ๋ฐฉ๋ฒ
1) ๋ฐฐ์ด์ ๋ค์ง๋ ๋ฐฉ๋ฒ์๋ ํฌ๊ฒ ๋๊ฐ์ง๊ฐ ์๋ค.
1)-1. ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ์ฌ ๋ค์งํ ์์๋ก ๊ฐ์ ๋ณต์ฌํ๋ ๋ฒ
1)-2. ์ฃผ์ด์ง ๋ฐฐ์ด ์์ฒด๋ฅผ ๋ค์ง๋ ๋ฐฉ๋ฒ (in-place ๋ฐฉ์)
์ด ๋ฌธ์ ์์๋ ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์ ํฉํ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค.
<ํ์ํ ์๋ฐ ๊ฐ๋ >
1. ๋ฐฐ์ด ๊ธธ์ด ๊ตฌํ๊ธฐ :
array.length๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์ ์ ์๋ค.
2. ๋ฐ๋ณต๋ฌธ :
for ๋ฃจํ๋ฅผ ์ฌ์ฉํด ๋ฐฐ์ด์ ๋์์๋ถํฐ ์์ํด ์ฒซ ๋ฒ์งธ๊น์ง ๋ฐ๋ณตํ๋ค.
3. ์๋ก์ด ๋ฐฐ์ด ์์ฑ :
๋ฐฐ์ด์ ๊ณ ์ ํฌ๊ธฐ์ด๋ฏ๋ก, ๋ค์งํ ๊ฐ์ ์ ์ฅํ ์๋ก์ด ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ์์ฑํด์ผ ํ๋ค.
Solution ๐ก
1. ์ฃผ์ด์ง ๋ฐฐ์ด ๊ธธ์ด๋ฅผ ํ์ธํ๋ค.
2. ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ๋ค.
3. ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด ์ฃผ์ด์ง ๋ฐฐ์ด์ ๋ง์ง๋ง ์์๋ถํฐ ์ฒซ๋ฒ์งธ ์์๊น์ง ์๋ก์ด ๋ฐฐ์ด์ ๋ณต์ฌํ๋ค.
4. ๊ฒฐ๊ณผ ๋ฐํ : ์๋ก ์์ฑํ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
public class Main {
public static int[] solution(int[] num_list) {
// 1. ๋ฐฐ์ด ๊ธธ์ด ํ์ธ
int length = num_list.length;
// 2. ์๋ก์ด ๋ฐฐ์ด ์์ฑ - ๋ฐฐ์ด ๊ธธ์ด๋ฅผ ํ์ธํ ๊ฐ์ด ๋ค์ด๊ฐ 'length'๋ฅผ ๋ฐฐ์ด ๋ง๋ค๋ ๊ธธ์ด ์ค์ ์ ๋ฃ๋๋ค.
int[] reversedArray = new int[length];
// 3. ๋ฐฐ์ด์ ๊ฑฐ๊พธ๋ก ๋ณต์ฌ
for (int i = 0; i < length; i++) {
reversedArray[i] = num_list[length -1 -i];
}
// 4. ๊ฒฐ๊ณผ ๋ฐํ
return reversedArray;
}
public static void main(String[] args) {
// ํ
์คํธ ๋ฐ์ดํฐ
int[] num_list = {1, 2, 3, 4, 5};
int[] result = solution(num_list);
// ๊ฒฐ๊ณผ ์ถ๋ ฅ
for (int num : result) {
System.out.print(num + " ");
}
}
}
<์ฝ๋ ์ค๋ช >
1. solution ๋ฉ์๋ :
- num_list.length๋ก ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ์๋ก์ด ๋ฐฐ์ด reversedArray๋ฅผ ๊ฐ์ ํฌ๊ธฐ๋ก ์์ฑํ๋ค.
- ๋ฐ๋ณต๋ฌธ์์ i๋ฅผ ์ฆ๊ฐ์ํค๋ฉฐ, ์๋ ๋ฐฐ์ด์ (length -1 -i)๋ฒ์งธ ์์๋ฅผ reversedArray[i]์ ๋ณต์ฌํ๋ค.
2. main ๋ฉ์๋ :
1 ) main ๋ฉ์๋๋ ํ๋ก๊ทธ๋จ์ ์์์ ์ด๋ค. ์ปดํจํฐ๋ ํญ์ main ๋ฉ์๋๋ถํฐ ์ฝ๊ณ ์คํํ๋ค.
2) main ๋ฉ์๋ ์์์ ์ฐ๋ฆฌ๋ solution ๋ฉ์๋๋ฅผ ๋ถ๋ฌ์จ๋ค.
(solution ๋ฉ์๋๋ ๋ฐฐ์ด์ ์์๋ฅผ ๊ฑฐ๊พธ๋ก ๋ค์ง๋ ์ญํ ์ ์ฐ๋ฆฌ๋ ๋ง๋ค์์๋ค.)
< solution ๋ฉ์๋๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฒ์ ๋ฐฐ์๋ณผ๊น? >
์ฝ๋ ๋ถ๋ถ:
int[] result = solution(num_list);
1. solution(num_list) :
์ด ๋ถ๋ถ์ solution์ด๋ผ๋ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ๋ถ๋ฌ์ค๋ ์์ ์ด๋ค.
num_list๋ผ๋ ๋ฐฐ์ด์ solution ๋ฉ์๋์ "์ฌ๊ธฐ ์ด๊ฑธ ์ฒ๋ฆฌํด์ค"ํ๊ณ ๊ฑด๋ค์ฃผ๋ ๊ฒ์ด๋ค.
num_list๋ผ๋ ๋ฐฐ์ด์ ์ค ํ ๋, solution ๋๊ฐ ์ ์ฅ๋์ด ์๋ ๋์์ ์ด ๋ฐฐ์ด์ ์ ์ฉํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ด ๋!
2. int[] result = :
solution ๋ฉ์๋๋ ๋ฐฐ์ด์ ๋ค์ง์ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๋๋ ค์ค๋ค.
๊ทธ ๋๋ ค๋ฐ์ ๋ฐฐ์ด์ result๋ผ๋ ๋ฐฐ์ด์ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ ๋๊ฐ ์ค ๋ฐฐ์ด(num_list)์ ๊ฑฐ๊พธ๋ก ๋ง๋ ๋ฐฐ์ด์ result๋ผ๋ ๋ฐฐ์ด ์์์ ๋ฃ์ด๋๊ฒ. ๋ฐ์!
3. ์ฐ๊ฒฐ๋๋ ์๋ฆฌ :
solution ๋ฉ์๋๋ ๋ณ๋๋ก ๋ฏธ๋ฆฌ ์ ์๋์ด ์๋ค.
main ๋ฉ์๋์์ ํธ์ถํ๋ฉด, solutio์ด ์ผ์ ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ค๋ค.
3) solution ๋ฉ์๋๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํด์ main ๋ฉ์๋๋ก ๋๋ ค์ค๋ค.
4) main ๋ฉ์๋๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ(for๋ฌธ ์ฌ์ฉ)ํ๋ค.
< for (int num : result)์ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณผ๊น? >
for (int num : result) {
System.out.print(num + " ");
}
1. for์ ์ญํ :
- result ๋ฐฐ์ด์ ๋ชจ๋ ๊ฐ์ ํ๋์ฉ ๊บผ๋ด์ ๋ฐ๋ณตํ๋ค.
2. int num :
- num์ ๋ฐฐ์ด์ ํ์ฌ ๊บผ๋ธ ์ซ์๋ฅผ ๋ด๋ ์์ ์์๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
3. :์ ์๋ฏธ :
- :์ ๋ฐฐ์ด์์ ๊ฐ์ ํ๋์ฉ ๊บผ๋ธ๋ค๋ ๋ป์ด๋ค.
<์์ ์คํ>
int[] num_list = {1, 2, 3, 4, 5};
<์ถ๋ ฅ>
5 4 3 2 1
< ๋ฐฐ์ด์ ๊ธธ์ด ์ธ๋ ๋ฒ์ ์์๋ณผ๊น? >
๋ฐฐ์ด์ด๋?
๋จผ์ , ๋ฐฐ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์์๋๋ก ์ ์ฅํ๋ ์์๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
๋ฐฐ์ด์ ๊ฐ ์์๋ 0๋ถํฐ ์์ํ๋ ๋ฒํธ(์ธ๋ฑ์ค)๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋ฐฐ์ด: [1, 2, 3, 4, 5]
์ธ๋ฑ์ค: 0 1 2 3 4
์์๋ฅผ ๋ค์ง๋ ์๋ฆฌ๋ ์ด๋ป๊ฒ ๋๋ ๊ฑฐ์ง?
์๋ ๋ฐฐ์ด: [1, 2, 3, 4, 5]
์ธ๋ฑ์ค: 0 1 2 3 4
๋ค์งํ ๋ฐฐ์ด: [5, 4, 3, 2, 1]
์ธ๋ฑ์ค: 0 1 2 3 4
์ด ๊ฐฏ์๋ณด๋ค ํญ์ -1์ด ์ธ๋ฑ์ค์ ๋ง์ง๋ง ์์
์ด ๊ฐฏ์(length)์ ์ธ๋ฑ์ค์ ๋งจ ๋ง์ง๋ง ์๋ฒ์ ๊ตฌ๋ถํ๋ฉด ๋๋ค.
(length -1 -i)์ ๋ป
์ฌ๊ธฐ์ ์ค์ํ ๊ฑด ๋งจ ๋ง์ง๋ง๋ถํฐ ์ฒซ ๋ฒ์งธ๊น์ง ์์๋๋ก ๊ฐ์ ธ์ค๊ธฐ์ธ๋ฐ, ๊ทธ๊ฑธ ์ฝ๊ฒ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก (length -1 -i) ์ด๋ค.
1) length -1 :
๋ฐฐ์ด์์ ๋งจ ๋ง์ง๋ง ์์์ ๋ฒํธ(์ธ๋ฑ์ค)๋ฅผ ์ฐพ๋ ๊ณต์์ด๋ค.
(์ด ๊ฐฏ์์ -1์ ํญ์ ์ธ๋ฑ์ค์ ๋ง์ง๋ง ์์์ด๋๊น!)
์๋ฅผ ๋ค์ด, ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 5๋ผ๋ฉด, ๋ง์ง๋ง ์ธ๋ฑ์ค๋ 5-1 = 4์ด๋ค. (์? ์ธ๋ฑ์ค๋ ํญ์ 0๋ถํฐ ์ธ๋๊น 1๋ถํฐ ์ธ๋ ์ด ๊ฐฏ์๋ณด๋ค ํญ์ -1๋งํผ ์ ๋ค.)
2) i
๋ฐ๋ณต๋ฌธ์์ ์ฌ์ฉํ๋ ์ซ์์ด๋ค. ๋ฐ๋ณต๋ฌธ์ ์ฒ์์๋ 0, ๊ทธ ๋ค์ 1, 2 ... ์ด๋ ๊ฒ ํ๋์ฉ ์ปค์ง๋ค.
์ฆ, ์์์๋ถํฐ ๋ช ๋ฒ์งธ ์์๋ฅผ ์ฒ๋ฆฌํ๊ณ ์๋์ง ๋ํ๋ด๋ ์ซ์์ด๋ค.
3) length -1 -i
๋ง์ง๋ง ์์์์๋ถํฐ i๋ฒ์งธ ์์๋ฅผ ๊ณ์ฐํ๋ค.
์๋ฅผ ๋ค์ด, i๊ฐ 0์ด๋ฉด length - 1 -0 = 4, ์ฆ, ๋งจ ๋ง์ง๋ง ์์๋ฅผ ๋ปํ๋ค.
i๊ฐ 1์ด๋ฉด length -1 -1 = 3, ์ฆ ๋์์ ๋ ๋ฒ์งธ ์์๋ฅผ ๋ปํ๋ค.
์ํ! length๋ 1๋ถํฐ ์ธ๋ ์ด ๊ฐฏ์์ด๋๊น
์ธ๋ฑ์ค๋ก ๋ณํ ์ํค๊ธฐ ์ํด์๋ -1์ ํด์ผ๋ง ํ๊ณ
i๋ ์ธ๋ฑ์ค๋ฅผ 0๋ถํฐ ์ธ๋ ์๋๊น
length -1 -i ๋ i๊ฐ 0๋ถํฐ ํ๋์ฉ ์ฆ๊ฐ ํ ์๋ก
๊ฒฐ๊ณผ์ ์ผ๋ก, ๋ฐฐ์ด์ ๋ง์ง๋ง๋ถํฐ ์ฐจ๋ก๋ก ๊ฐ์ ๊ฐ์ ธ์ค๋๋ก ๋ง๋๋๊ตฌ๋.
<์ค๋ต๋ ธํธ>
๋์ ํ๋ฆฐ ์ฝ๋
class Solution {
public int[] solution(int[] num_list) {
int length = length.num_list;
int [] reversed = int [length];
for (i = 0; i < reversed.length < i++) {
reversed[i] = num_list[length-1-i];
return reversed;
}
}
}
ํ๋ฆฐ์ ๋ฐ๋ก ์ก๊ธฐ
1. ๋ฐฐ์ด์ ๊ธธ์ด ํฌ๊ธฐ๋ฅผ ์ก๋ ๋ฌธ๋ฒ์ num_list.length์ด๋ค. (๋๋ length.num_list๋ผ๊ณ ํ์ฌ ํ๋ ธ๋ค.)
2. ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ ๋์๋ = ์ค๋ฅธ์ชฝ์ 'new'๋ฅผ ๋ถ์ฌ์ค์ผ ํ๋ค. (๋๋ new๋ฅผ ๋นผ๋๊ณ ์ ์๋ค.)
3. for ๋ฌธ์์ ์๋ชป๋ ์ :
3-1) i ๊ฐ '์ ์'ํ์์ ์ ์ธํด์ผ ํ๋ค. (i = 0์ด๋ผ๊ณ ๋ง ํด์ ํ๋ ธ๋ค. int i = 0 ์ด ์ณ๋ค.)
3-2) i ๊ฐ ์ด๋๊น์ง ์งํ ๋ ์ง ์ ํ์ ๋๋ ๋ถ๋ฑํธ์์ ๊ตณ์ด ์๋ก์ด ๋ฐฐ์ด์ ํฌ๊ธฐ๋ก ์ ํํ ํ์์๋ค.
i < length ๋ก ์ ์ธํ๋ค. length๋ ์์ intํ์ผ๋ก ๊ธฐ์กด ๋ฐฐ์ด์ ํฌ๊ธฐ์ ์๋ก ์ค์ ํด ๋์๋ค.
3-3) ๊ฒฐ๊ณผ ๋ฐํ์ for๋ฌธ์ { }์์ ๋๋๊ฒ์ด ์๋๋ผ for๋ฌธ ๋ฐ๊นฅ์๋ค ๋์ด์ผ ํ๋ค.
ํ๋ฆฌ์ง ์์์ง๋ง ํ ์คํธ ์ฝ๋ ์ถ๋ ฅํ๋ ๊ฒ๋ ๋ฃ์.
<์ณ์ ์ฝ๋>
public class Main {
public static int[] solution(int[] num_list) {
//1.๋ค์ง์ ๋ฐฐ์ด์ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ฐฐ์ด์ ์์์ ํฌ๊ธฐ๋ฅผ ๊ธฐ์กด ๋ฐฐ์ด๊ณผ ๋๊ฐ์ด ์ค์ ํด์ผ ํ๋ฏ๋ก
// '๋ฐฐ์ดํฌ๊ธฐ ํ์ธ'
int length = num_list.length;
//2. ๋ค์ง์ ๋ฐฐ์ด์ ์์๋ฅผ ๋ฃ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์.(์ค๋ฅธ์ชฝ์ new ๋ฃ๋๊ฑฐ ๊น๋นกํ์ง ๋ง๊ธฐ!)
// ๋ง๋ค๋๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ข ์ ์ ํฌ๊ธฐ๋ฅผ ๋ณ์ ์ ์ธํ๊ฒ์ ํ์ฉํ์ฌ ์ค์ ํ๋ค.
int [] reversed = new int[length];
//3. for๋ฌธ์ ์ฌ์ฉํด์ ๊ธฐ์กด์ ๋ฐฐ์ด์ i๋ฒ์งธ ์์๋ฅผ ์๋ก์ด ๋ฐฐ์ด์ length-1-i์ ๋ฃ์.
// ์๋ก์ด i๋ผ๋ ์ ์ํ์ ์ ์ธํ ๋ int ๋นผ๋จน์ง ๋ง๊ณ , ๋๊ฐ ๋ง๋ length๋ผ๋๊ฑธ ํ์ฉํ๊ธฐ๋ ํ์.
// return๊ฐ์ for{}๋ฐ์ผ๋ก.
for (int i = 0; i < length; i++) {
reversed[i] = num_list[length-1-i];
}
return reversed;
}
public static void main(String[] args) {
//1.๋ฐฐ์ด ์ค๋น
int[] num_list = {1,2,3,4,5};
// 2. solution ๋ฉ์๋๋ฅผ ํธ์ถํด์ ๋ฐฐ์ด์ ๋ค์ง์
int[] result = solution(num_list);
// 3. ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ถ๋ ฅ
for (int num : result) {
System.out.print(num + " ");
}
}
}