-
[Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ kit ํฐ ์ ๋ง๋ค๊ธฐAlgo Rhythm๐บ๐/Programmers 2020. 7. 8. 13:03
๋ฌธ์ ์ค๋ช
์ด๋ค ์ซ์์์ k๊ฐ์ ์๋ฅผ ์ ๊ฑฐํ์ ๋ ์ป์ ์ ์๋ ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ๊ตฌํ๋ ค ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ซ์ 1924์์ ์ ๋ ๊ฐ๋ฅผ ์ ๊ฑฐํ๋ฉด [19, 12, 14, 92, 94, 24] ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ์ค ๊ฐ์ฅ ํฐ ์ซ์๋ 94 ์ ๋๋ค.
๋ฌธ์์ด ํ์์ผ๋ก ์ซ์ number์ ์ ๊ฑฐํ ์์ ๊ฐ์ k๊ฐ solution ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. number์์ k ๊ฐ์ ์๋ฅผ ์ ๊ฑฐํ์ ๋ ๋ง๋ค ์ ์๋ ์ ์ค ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ๋ฌธ์์ด ํํ๋ก return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ ์กฐ๊ฑด
-
number๋ 1์๋ฆฌ ์ด์, 1,000,000์๋ฆฌ ์ดํ์ธ ์ซ์์ ๋๋ค.
-
k๋ 1 ์ด์ number์ ์๋ฆฟ์ ๋ฏธ๋ง์ธ ์์ฐ์์ ๋๋ค.
์ด๋ป๊ฒ ํ์๋
์ฒซ๋ฒ์งธ ์๋ (ํ ์คํธ 6, 7, 8, 9 ์๊ฐ์ด๊ณผ ๐)
import java.util.ArrayList; import java.util.Arrays; import java.util.stream.Collectors; import java.lang.StringBuilder; class Solution { public String solution(String number, int k) { for(int i = 0; i < k; i++) { // remove i th index ArrayList<String> digits = Arrays.stream(number.split("")).collect(Collectors.toCollection(ArrayList::new)); ArrayList<String> reducedNums = new ArrayList<>(); for(int j = 0; j < digits.size(); j++) { ArrayList<String> copy = new ArrayList<>(digits); copy.remove(j); reducedNums.add(gather(copy)); } // find max String max = findMax(reducedNums); // renew number number = max; } return number; } public String findMax(ArrayList<String> list) { String max = list.get(0); for(int i = 1; i < list.size(); i++) { if(list.get(i).compareTo(max) > 0) max = list.get(i); } return max; } public String gather(ArrayList<String> list) { StringBuilder sbd = new StringBuilder(); for(String str : list) sbd.append(str); return sbd.toString(); } }
๋๋ฒ์งธ ์๋ (ํ ์คํธ 6, 7, 8, 9, 10 ์๊ฐ ์ด๊ณผ ๐คฆโ๏ธ๐คฆโ๏ธ)
import java.util.ArrayList; import java.util.Arrays; import java.lang.StringBuilder; class Solution { public String solution(String number, int k) { for(int i = 0; i < k; i++) { // remove i th index char[] digits = number.toCharArray(); ArrayList<String> reducedNums = new ArrayList<>(); for(int j = 0; j < digits.length; j++) { reducedNums.add(gather(digits, j)); } // find max String max = findMax(reducedNums); // renew number number = max; } return number; } public String findMax(ArrayList<String> list) { String max = list.get(0); for(int i = 1; i < list.size(); i++) { if(list.get(i).compareTo(max) > 0) max = list.get(i); } return max; } public String gather(char[] arr, int removedIdx) { StringBuilder sbd = new StringBuilder(); for(int i = 0; i < arr.length; i++) { if(i != removedIdx) sbd.append(arr[i]); } return sbd.toString(); } }
์ต์ข ํด๊ฒฐ ์ฝ๋
import java.lang.StringBuilder; class Solution { public String solution(String number, int k) { StringBuilder sbd = new StringBuilder(number); for (int i = 0; i < k; i++) { int l = sbd.length(); int idx = l - 1; for (int j = 0; j < l - 1; j++) { if (sbd.charAt(j) < sbd.charAt(j + 1)) { idx = j; break; } } sbd.deleteCharAt(idx); } return sbd.toString(); } }
์ ์ ๋ ๊ฒ ํ์๋
ํ๊ต์์ greedy ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ๋ฐฐ์ธ๋ ๊ต์๋๊ป์ ํด์ฃผ์ ๋ง์์ด ์๋ค.
"Greedy ์๊ณ ๋ฆฌ์ฆ์ ๋ณธ์ง์ ํ ์์ ์์ ์ต์ ์ ์ ํ์ด ๊ฒฐ๊ตญ ์ต์ ์ ์ ํ์ด๋ผ๋ ๊ฒ์ด๋ค."
๊ทธ๋์ ๋ณธ์ง์ ์ง์คํด์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํ ๊ฒฐ๊ณผ ์๋์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํ๋ค.
- number์ ๊ธธ์ด๊ฐ n์ด๋ผ๋ฉด 0๋ถํฐ n-1 ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ํ๋์ฉ ์ญ์ ํ ์ซ์๋ค์ ๋ชจ์๋๋๋ค.
- ๊ทธ ์ซ์๋ค ์ค ๊ฐ์ฅ ํฐ ์๋ฅผ ๊ณ ๋ฅธ๋ค. ๊ทธ๋ฆฌ๊ณ number์ ๊ฐ์ฅ ํฐ ์๋ฅผ ๋์ ํ๋ค.
- ์ ๊ณผ์ ์ k๋ฒ ๋ฐ๋ณตํ๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ค.
ํ์ง๋ง ๋ฌธ์ ๋ ํจ์จ์ด์๋ค.
๊ทธ๋์ ๋๋ฒ์งธ ์๋์์๋ ๋๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ต๋ํ ๋ฐฐ์ด๋ง ์ฌ์ฉํ๋ ๋ฐฉํฅ์ผ๋ก ์์ฑํ๋ค.
๊ทผ๋ฐ ์ฒซ๋ฒ์งธ ์๋๋ณด๋ค ๋ ํจ์จ์ด ๋๋นด๋ค ใ ใ ใ ใ ใ ใ ใ ... ๐คฆโ๏ธ๐คฆโ๏ธ
๊ฐ์ด ์คํฐ๋ํ๋ ์น๊ตฌ์ ์ด์ผ๊ธฐํด๋ณด๋ ๊ทธ ์น๊ตฌ๋ "ํฐ ์๊ฐ ์์ ์ฌ์๋ก ํฐ ์" ๋ผ๋ ์ฑ์ง์ ์ด์ฉํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ค๊ณ ํ๋ค.
๊ทธ๋์ ๊ทธ ์น๊ตฌ์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด์ ์ต์ข ์ฝ๋๋ฅผ ์์ฑํ๋ค. ๊ทธ ์น๊ตฌ ์ฝ๋๋ ์๋ ๋ธ๋ก๊ทธ์์ ํ์ธํ ์ ์๋ค.
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ๊ณ ๋์ Kit : [ํ์๋ฒ] ํฐ ์ ๋ง๋ค๊ธฐ
๋์ด๋ โ โ โ โ โ ๋ณธ ๋ฌธ์ ๋ ์๊ฐ๋ณด๋ค ๋นจ๋ฆฌ ํผ ๋ฌธ์ ์๋ค. ์์ธ ์ผ์ด์ค๋ฅผ ์ง๋ฌธํ๊ธฐ์์ ์ฐพ์๋ณผ ์ ์์ด์ ๊ทธ๋ฐ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ฒ์์ ๋ฐ๋ก ๋ ์ฌ๋๋ ์๊ณ ๋ฆฌ์ฆ๋๋ก ์ฝ๊ฒ ํ ์ ์์๊ณ , ํจ์จ์ฑ๏ฟฝ
0pencoding.github.io
๋ฌด์์ ๋ฐฐ์ ๋
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌธ์ ๋ฅผ ํ ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์์น์ด๋ ์ฑ์ง์ ์ฐพ๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋ฐฐ์ ๋ค.
๋ํ StringBuilder์์ deleteCharAt์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ฒ์ ์ฌ์ฉํ๋๋ฐ ํจ์จ์ฑ ์ธก๋ฉด์์ ์ข์ ๊ฒ ๊ฐ๋ค. ์์ผ๋ก ์์ฃผ ์ฌ์ฉํด์ผ๊ฒ ๋ค.
'Algo Rhythm๐บ๐ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
-