-
ํ๋ก๊ทธ๋๋จธ์ค ๊ธฐ์ด ๋ฌธ์ “๋ง์ง๋ง ๋ ์์” ๋ฅผ ํ๋ค๊ฐ ์๋์ ๊ฐ์ ์ํฉ์ ๋ง๋ฅ๋จ๋ ธ๋ค.
๋ฌธ์ ์ค๋ช
์ ์ ๋ฆฌ์คํธ num_list๊ฐ ์ฃผ์ด์ง ๋, ๋ง์ง๋ง ์์๊ฐ ๊ทธ์ ์์๋ณด๋ค ํฌ๋ฉด ๋ง์ง๋ง ์์์์ ๊ทธ์ ์์๋ฅผ ๋บ ๊ฐ์ ๋ง์ง๋ง ์์๊ฐ ๊ทธ์ ์์๋ณด๋ค ํฌ์ง ์๋ค๋ฉด ๋ง์ง๋ง ์์๋ฅผ ๋ ๋ฐฐํ ๊ฐ์ ์ถ๊ฐํ์ฌ returnํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
class Solution { public int[] solution(int[] num_list) { int n=num_list.length-1; return num_list[n] > num_list[n-1] ? num_list[n]-num_list[n-1]:2*num_list[n]; } }
์๊ฐ์์ด ์ด๋ ๊ฒ ์ ์๋ค๊ฐ.. ํจ์์ ๋ฐํ๊ฐ์ด int[] ๋ผ๋ ์ฌ์ค์ ๊นจ๋ฌ์๋ค.
ํจ์์ ๋ฐํ๊ฐ ์๊ฐํ๊ธฐ
ํจ์์ ๋ฐํ ํ์ ์ int[] ์ธ๋ฐ, int ๊ฐ์ ๋ฐํ ์ค int[] ํ์ ์ ๋ฐํํ๋ ค๋ฉด ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด์ ๋ฐํํด์ผ ํจ๊ทธ๋ ๋ค๋ฉด.. ์๋ฐ์์ (์ ์ ) ๋ฐฐ์ด์ ์์๋ฅผ ์ด๋ป๊ฒ ์ถ๊ฐํ ๊น?
์ผ๋จ ๋ฐฐ์ด ๊ฐ๋ ๋ถํฐ ๋น ๋ฅด๊ฒ ์ง๊ณ ๋์ด๊ฐ๋ณด์.
๋ฐฐ์ด(Array) ์ด๋?
- ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ํ ์๋ฃ๊ตฌ์กฐ
- ๋ณต์์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐ์์ผ ๊ด๋ฆฌํ๋ ์๋ฃ๊ตฌ์กฐ
์ ์ ๋ฐฐ์ด(Static Array)
- ๊ฐ์ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅํ๊ณ ์ธ๋ฑ์ค๋ก ์ ๊ทผ
- ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ์์ ์ ํด์ง ์ฌ์ด์ฆ์์ ๋ณ๋๋๋ ๊ฒ์ด ๋ถ๊ฐํ๋ค.
- ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ง์ ์ ์ฅํ๊ณ , ๊ทธ ์ธ์ ์ฃผ์๋ ์ ์ฅํ์ง ์๋๋ค. ๋์ Offset(์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก๋ถํฐ ์ผ๋ง๋ ๋จ์ด์ ธ์๋์ง)์ ์ฌ์ฉํ์ฌ ์ ๊ทผํ๋ค.
- ์ ๊ทผ์ด ๋น ๋ฅธ ๋์ , ์ฝ์ & ์ญ์ & ๋ณ๊ฒฝ์ด ์ด๋ ต๋ค.
int[] staticArray = new int[5]; // ์ ํํ ๋ ์ฌ์ด์ฆ ์ง์ staticArray[0] = 10; System.out.println(staticArray[0]); // 10
๋์ ๋ฐฐ์ด(Dynamic Array)
- ์ฌ์ด์ฆ๊ฐ ๊ฐ๋ณ์ ์ธ(๋์ ์ธ) ๋ฐฐ์ด์ด๋ค.
- ์๋ฐ์์์ ArrayList
- ์์ ์ถ๊ฐ, ์ญ์ ๊ฐ ์์ ๋กญ๋ค. ์์๋ฅผ ์ถ๊ฐ/์ญ์ ํ๋ฉด ์๋์ผ๋ก ํฌ๊ธฐ๊ฐ ๋ณํ๋ค.
import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Integer> dynamicArray = new ArrayList<>(); //๋์ ๋ฐฐ์ด ์ ์ธ dynamicArray.add(10); dynamicArray.add(20); System.out.println(dynamicArray.get(0)); // 10 dynamicArray.remove(0); // ์ฒซ ๋ฒ์งธ ์์ ์ญ์ System.out.println(dynamicArray.size()); // 1 (ํฌ๊ธฐ๊ฐ ์๋์ผ๋ก ์ค์ด๋ฆ) } }
์ ๋ฆฌํ๋ฉด ์๋ฐ์ (์ ์ ) ๋ฐฐ์ด → ๊ธธ์ด๊ฐ ๊ณ ์ . ํ ๋ฒ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ์ ํด์ง๋ฉด ๋ณ๊ฒฝํ ์ ์์
๊ทธ๋ผ ์๋ก์ด ์์๋ฅผ ์ด๋ป๊ฒ ์ถ๊ฐํ ์ ์์๊น?
“์๋ฐ ๋ฐฐ์ด์ ์์ ์ถ๊ฐ” ์ด ํค์๋๋ก ๊ฒ์ํ๋๊น ์๋ ๊ธ์ด ๋์ค๋๋ผ… ๋๋ฌด ์๊ฒผ๋ค.
์ด์จ๋ .. ๊ณ ์ ์ ์ธ ๊ธธ์ด์ ์๋ฐ ๋ฐฐ์ด์ ์์๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
(1) System.arraycopy ์ด์ฉ
class Solution { public static int[] addElement(int[] original, int newValue) { int n = original.length; int[] newArray = new int[n + 1]; // ๊ธฐ์กด ๋ฐฐ์ด๋ณด๋ค 1๊ฐ ๋ ํฐ ์ ๋ฐฐ์ด ์์ฑ System.arraycopy(original, 0, newArray, 0, n); // ๊ธฐ์กด ๋ฐฐ์ด ๋ณต์ฌ newArray[n] = newValue; // ์๋ก์ด ์์ ์ถ๊ฐ return newArray; } }
- ๋ ํฐ ๋ฐฐ์ด์ ๋ง๋ค์ด์ ๊ธฐ์กด ๋ฐฐ์ด์ ๋ณต์ฌํ๊ณ ์๋ก์ด ์์ ์ถ๊ฐ
(2) Arrays.copyOf
import java.util.Arrays; class Solution { public static int[] addElement(int[] original, int newValue) { int[] newArray = Arrays.copyOf(original, original.length + 1); // ๊ธฐ์กด ๋ฐฐ์ด์์ ํฌ๊ธฐ๋ฅผ 1 ์ฆ๊ฐ์ํจ ๋ฐฐ์ด ์์ฑ newArray[original.length] = newValue; // ์๋ก์ด ์์ ์ถ๊ฐ return newArray; } }
(3) ArrayList ํ์ฉ
import java.util.ArrayList; import java.util.Arrays; class Solution { public static int[] addElement(int[] original) { ArrayList<Integer> dynamicArray = new ArrayList<>(Arrays.asList(original)); dynamicArray.add(4); return dynamicArray; } }
๋ฐ๋ฉด ๋์ ๋ฐฐ์ด์, ArrayList์ ๋ด์ฅํจ์์ธ add()๋ฅผ ํ์ฉํ์ฌ ์ฝ๊ฒ ์์๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
์ด๋ค ๋ฐฉ์์ ์ฐ๋ ๊ฒ ํจ์จ์ ์ธ๊ฐ?
1๏ธโฃ System.arraycopy() ์ด์ฉ
์ ํต์ ์ธ ๋ฐฉ๋ฒ์ด๊ณ , ์ถ๊ฐ์ ์ธ ๊ฐ์ฒด ์์ฑ์ด ํ์ ์๋ค.
๋ฐฐ์ด ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ๋๋ง๋ค ์ ๋ฐฐ์ด์ ์์ฑํด์ผ ํ๋ฏ๋ก ์ถํ์ ๋ ๋ฐฐ์ด ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ผ์ด ์๋ค๋ฉด ์ฑ๋ฅ ๋ถ๋ด์ด ์๋ค.
2๏ธโฃ Arrays.copyOf() ์ด์ฉ
๋ด๋ถ์ ์ผ๋ก System.arraycopy() ๋ฅผ ํธ์ถํ๋ฏ๋ก 1๋ฒ๊ณผ ์ฑ๋ฅ์ด ๊ฑฐ์ ๋์ผํ๋ค.
(ํธ์ถ ๊ณผ์ ์์ ์์ฃผ ์ฝ๊ฐ์ ์ค๋ฒํค๋)
์ฝ๋๋ 1๋ฒ๋ณด๋ค ์ง๊ด์ ์ด๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐฐ์ด ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ๋๋ง๋ค ์ ๋ฐฐ์ด์ ์์ฑํด์ผ ํ๋ค.
3๏ธโฃ ArrayList ํ์ฉ
๋ฐฐ์ด์ ์ถ๊ฐํ๋ ๊ณผ์ ์ด ํธ๋ฆฌํ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ค.
์ฌ๋ฌ ๋ฒ ์์๋ฅผ ์ถ๊ฐํ ์ผ์ด ์์ ๋ ์ ํฉํ๋ค.
์ ๋ฆฌํ๋ฉด, 1๋ฒ๊ณผ 2๋ฒ์ ์ฑ๋ฅ์ ๋น์ทํ๊ณ ( ๋ฐฐ์ด์ ๋ณต์ฌํ๋ O(N) ์ฐ์ฐ )
3๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ด ๋จ์ด์ง๋ ๋์ ๋ฐฐ์ด ํฌ๊ธฐ๊ฐ ๊ณ์ ๋ณํด์ผ ํ๋ค๋ฉด 3๋ฒ์ ์ฐ๋ ๊ฒ ํธํ๋ค.
โ ์๋ & ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๊ฐ ํ์ํ๋ฉด System.arraycopy()
โ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์๋ฅผ ์๊ฐํ๋ฉด Arrays.copyOf()
โ ์ ์ฐํ ํฌ๊ธฐ ๋ณ๊ฒฝ์ด ํ์ํ๋ฉด ArrayList'๐ญ Study > : Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ