๐ ๋ฌธ1) ์ด๋ค ๋ฌธ์ฅ์ ๊ฐ ์ํ๋ฒณ์ ์ผ์ ํ ๊ฑฐ๋ฆฌ๋งํผ ๋ฐ์ด์ ๋ค๋ฅธ ์ํ๋ฒณ์ผ๋ก ๋ฐ๊พธ๋ ์ํธํ ๋ฐฉ์์ ์์ ์ํธ๋ผ๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด "AB"๋ 1๋งํผ ๋ฐ๋ฉด "BC"๊ฐ ๋๊ณ , 3๋งํผ ๋ฐ๋ฉด "DE"๊ฐ ๋ฉ๋๋ค. "z"๋ 1๋งํผ ๋ฐ๋ฉด "a"๊ฐ ๋ฉ๋๋ค. ๋ฌธ์์ด s์ ๊ฑฐ๋ฆฌ n์ ์ ๋ ฅ๋ฐ์ s๋ฅผ n๋งํผ ๋ฏผ ์ํธ๋ฌธ์ ๋ง๋๋ ํจ์, solution์ ์์ฑํด ๋ณด์ธ์.
์ ํ ์กฐ๊ฑด
์
์ถ๋ ฅ ์
| s | n | result |
|---|---|---|
"AB" | 1 | "BC" |
"z" | 1 | "a" |
"a B z" | 4 | "e F d" |
๋์ ํ์ด
package programmers;
public class CaeserCipher {
public static String solution(String s, int n) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); i++ ) {
char c = s.charAt(i);
if(Character.isUpperCase(c)) {
c = (char)((c - 'A' + n) % 26 + 'A');
}else if(Character.isLowerCase(c)) {
c = (char)((c - 'a' + n) % 26 + 'a');
}
sb.append(c);
}
return sb.toString();
}
public static void main(String[] args) {
solution("a B z", 4);
}
}
๋์ ์๊ฐ
๋งค๊ฐ๋ณ์ s์, ๊ฑฐ๋ฆฌ๋งํผ ๋ฏธ๋ n์ ์ด์ฉํ์ฌ, ๋ค๋ฅธ ๋ฌธ์๋ก ๋ณํํ๋ ์์ ์ํธ(๊ฐ ๋ฌธ์๋ฅผ ์ผ์ ํ ๊ฑฐ๋ฆฌ๋งํผ ์ด๋์ํค๋ ๋ฐฉ์์ ์ํธํ ๋ฐฉ๋ฒ)๋ฅผ ๋ค์๋ ์๊ฐ์, ์ํ๋ฒณ a, A, z, Z ์ดํ ๋ค์์ ์ค๋ ๋ฌธ์๋ ๋ฐ๋ณตํ์ฌ ๋์์ผ ์ด๋ฅผ ๊ตฌํํ ๋ก์ง์ด ํ์ํ๋ค๋ ์๊ฐ์ ํ๋ค. ๊ฒฐ๊ตญ์ ์์คํค ์ฝ๋์ ์๋ฌธ์, ๋๋ฌธ์๋ฅผ ๋ฐ๋ณตํ๋ ๋ก์ง์ ๊ฒฐํฉํ๋ฉด ๋๋ค.
StringBuilder ๋ ๋ฌธ์์ ์ถ๊ฐ, ๋๋ ์ ๊ฑฐ๊ฐ ์ฝ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ผ๋ฉฐ, ๋งค๊ฐ๋ณ์ s์ ๊ธธ์ด ๋งํผ ์ํ๋ฅผ ํ์ฌ, char c ์ s.charAt(i)๋ฅผ ๋ด์ c๊ฐ ๋๋ฌธ์์ธ์ง, ์๋ฌธ์์ธ์ง๋ฅผ ํ๋ณํ์ฌ ์ต์ข
์ ์ผ๋ก StringBuilder ๊ฐ์ฒด์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์๋ค. ํต์ฌ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
if(Character.isUpperCase(c)) {
c = (char)((c - 'A' + n) % 26 + 'A');
}else if(Character.isLowerCase(c)) {
c = (char)((c - 'a' + n) % 26 + 'a');
}
์ด๋ฅผ ์์ฝํ์๋ฉด, char ํ์
c - 'A'์ ์ฐ์ฐ์ - ์ฐ์ฐ์ด ์๊ธฐ๋๋ฌธ์ intํ์ผ๋ก ์๋ ํ๋ณํ ๊ฐ์ ์ ๊ฑฐ์น๊ธฐ๋๋ฌธ์ ASCII๋ก ํ๋ณํ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ % 26 ํ๋ ์ด์ ๋ ์ํ๋ฒณ์ด 26๊ฐ ์๊ธฐ ๋๋ฌธ์ 'z' ์ดํ๋ก๋ ๋ค์ 'a'๋ก ํ์ ํด์ผ ํ๊ณ , ์ด๋ฅผ ์ํด ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฒ์์์ ๋ฒ์ด๋ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ + 'A' ๋๋ + 'a' ํ๋ฏ๋ก์จ ๋ค์ ์๋ ๋ฒ์ฃผ ๋ด์ ์๋๋ก ๋ณด์ฅํ๊ธฐ ์ํด์์ด๋ค. ์๋ฌธ์๋ ๊ฒฐ๊ณผ๋ ๋์ผํ๋ค. ์ด์ธ์ ์๋ฌธ์, ๋๋ฌธ์๊ฐ ์๋๋ผ๋ฉด(์ฆ, ๊ณต๋ฐฑ์ธ ๊ฒฝ์ฐ) ๋ฌธ์ ๊ทธ๋๋ก sb์ ์ถ๊ฐํด์ค๋ค.
๐ ๋ฌธ2) ๋ช ํจ ์ง๊ฐ์ ๋ง๋๋ ํ์ฌ์์ ์ง๊ฐ์ ํฌ๊ธฐ๋ฅผ ์ ํ๋ ค๊ณ ํฉ๋๋ค. ๋ค์ํ ๋ชจ์๊ณผ ํฌ๊ธฐ์ ๋ช ํจ๋ค์ ๋ชจ๋ ์๋ฉํ ์ ์์ผ๋ฉด์, ์์์ ๋ค๊ณ ๋ค๋๊ธฐ ํธํ ์ง๊ฐ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์๊ฑด์ ๋ง์กฑํ๋ ์ง๊ฐ์ ๋ง๋ค๊ธฐ ์ํด ๋์์ธํ์ ๋ชจ๋ ๋ช ํจ์ ๊ฐ๋ก ๊ธธ์ด์ ์ธ๋ก ๊ธธ์ด๋ฅผ ์กฐ์ฌํ์ต๋๋ค.
์๋ ํ๋ 4๊ฐ์ง ๋ช ํจ์ ๊ฐ๋ก ๊ธธ์ด์ ์ธ๋ก ๊ธธ์ด๋ฅผ ๋ํ๋ ๋๋ค.
| ๋ช ํจ ๋ฒํธ | ๊ฐ๋ก ๊ธธ์ด | ์ธ๋ก ๊ธธ์ด |
|---|---|---|
| 1 | 60 | 50 |
| 2 | 30 | 70 |
| 3 | 60 | 30 |
| 4 | 80 | 40 |
๊ฐ์ฅ ๊ธด ๊ฐ๋ก ๊ธธ์ด์ ์ธ๋ก ๊ธธ์ด๊ฐ ๊ฐ๊ฐ 80, 70์ด๊ธฐ ๋๋ฌธ์ 80(๊ฐ๋ก) x 70(์ธ๋ก) ํฌ๊ธฐ์ ์ง๊ฐ์ ๋ง๋ค๋ฉด ๋ชจ๋ ๋ช ํจ๋ค์ ์๋ฉํ ์ ์์ต๋๋ค. ํ์ง๋ง 2๋ฒ ๋ช ํจ์ ๊ฐ๋ก๋ก ๋ํ ์๋ฉํ๋ค๋ฉด 80(๊ฐ๋ก) x 50(์ธ๋ก) ํฌ๊ธฐ์ ์ง๊ฐ์ผ๋ก ๋ชจ๋ ๋ช ํจ๋ค์ ์๋ฉํ ์ ์์ต๋๋ค. ์ด๋์ ์ง๊ฐ ํฌ๊ธฐ๋ 4000(=80 x 50)์ ๋๋ค.
๋ชจ๋ ๋ช ํจ์ ๊ฐ๋ก ๊ธธ์ด์ ์ธ๋ก ๊ธธ์ด๋ฅผ ๋ํ๋ด๋ 2์ฐจ์ ๋ฐฐ์ด sizes๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ๋ชจ๋ ๋ช ํจ์ ์๋ฉํ ์ ์๋ ๊ฐ์ฅ ์์ ์ง๊ฐ์ ๋ง๋ค ๋, ์ง๊ฐ์ ํฌ๊ธฐ๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
| sizes | result |
|---|---|
[[60, 50], [30, 70], [60, 30], [80, 40]] | 4000 |
[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] | 120 |
[[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] | 133 |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
์
์ถ๋ ฅ ์ #2
๋ช ํจ๋ค์ ์ ์ ํ ํ์ ์์ผ ๊ฒน์ณค์ ๋, 3๋ฒ์งธ ๋ช ํจ(๊ฐ๋ก: 8, ์ธ๋ก: 15)์ด ๋ค๋ฅธ ๋ชจ๋ ๋ช ํจ๋ณด๋ค ํฌ๊ธฐ๊ฐ ํฝ๋๋ค. ๋ฐ๋ผ์ ์ง๊ฐ์ ํฌ๊ธฐ๋ 3๋ฒ์งธ ๋ช ํจ์ ํฌ๊ธฐ์ ๊ฐ์ผ๋ฉฐ, 120(=8 x 15)์ return ํฉ๋๋ค.
์
์ถ๋ ฅ ์ #3
๋ช ํจ๋ค์ ์ ์ ํ ํ์ ์์ผ ๊ฒน์ณค์ ๋, ๋ชจ๋ ๋ช ํจ์ ํฌํจํ๋ ๊ฐ์ฅ ์์ ์ง๊ฐ์ ํฌ๊ธฐ๋ 133(=19 x 7)์ ๋๋ค.
๋์ ํ์ด
package programmers;
public class LeastReactangle {
public static int solution(int[][] sizes) {
int maxWidth = 0;
int maxHeight = 0;
for(int[] size : sizes) {
int w = Math.max(size[0], size[1]);
int h = Math.min(size[0], size[1]);
maxWidth = Math.max(maxWidth, w);
maxHeight = Math.max(maxHeight, h);
}
return maxWidth * maxHeight;
}
public static void main(String[] args) {
solution(new int[][] {{60,50},{30,70},{60,30},{80,40}});
}
}
๐ ๋ฌธ3) ๋ค์ค๋ ํ์ ํ๋ก๋๊ฐ ๋น์๊ธ์ ์จ๊ฒจ๋๋ ์ฅ์๋ฅผ ์๋ ค์ค ๋น๋ฐ์ง๋๋ฅผ ์์ ๋ฃ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋น๋ฐ์ง๋๋ ์ซ์๋ก ์ํธํ๋์ด ์์ด ์์น๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ ์ํธ๋ฅผ ํด๋ ํด์ผ ํ๋ค. ๋คํํ ์ง๋ ์ํธ๋ฅผ ํด๋ ํ ๋ฐฉ๋ฒ์ ์ ์ด๋์ ๋ฉ๋ชจ๋ ํจ๊ป ๋ฐ๊ฒฌํ๋ค.
์ง๋๋ ํ ๋ณ์ ๊ธธ์ด๊ฐ n์ธ ์ ์ฌ๊ฐํ ๋ฐฐ์ด ํํ๋ก, ๊ฐ ์นธ์ ๊ฐ ์นธ์ "๊ณต๋ฐฑ"(" ") ๋๋ "๋ฒฝ"("#") ๋ ์ข
๋ฅ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ ์ฒด ์ง๋๋ ๋ ์ฅ์ ์ง๋๋ฅผ ๊ฒน์ณ์ ์ป์ ์ ์๋ค. ๊ฐ๊ฐ "์ง๋ 1"๊ณผ "์ง๋ 2"๋ผ๊ณ ํ์. ์ง๋ 1 ๋๋ ์ง๋ 2 ์ค ์ด๋ ํ๋๋ผ๋ ๋ฒฝ์ธ ๋ถ๋ถ์ ์ ์ฒด ์ง๋์์๋ ๋ฒฝ์ด๋ค. ์ง๋ 1๊ณผ ์ง๋ 2์์ ๋ชจ๋ ๊ณต๋ฐฑ์ธ ๋ถ๋ถ์ ์ ์ฒด ์ง๋์์๋ ๊ณต๋ฐฑ์ด๋ค.
"์ง๋ 1"๊ณผ "์ง๋ 2"๋ ๊ฐ๊ฐ ์ ์ ๋ฐฐ์ด๋ก ์ํธํ๋์ด ์๋ค.
์ํธํ๋ ๋ฐฐ์ด์ ์ง๋์ ๊ฐ ๊ฐ๋ก์ค์์ ๋ฒฝ ๋ถ๋ถ์ 1, ๊ณต๋ฐฑ ๋ถ๋ถ์ 0์ผ๋ก ๋ถํธํํ์ ๋ ์ป์ด์ง๋ ์ด์ง์์ ํด๋นํ๋ ๊ฐ์ ๋ฐฐ์ด์ด๋ค.

๋ค์ค๊ฐ ํ๋ก๋์ ๋น์๊ธ์ ์์ ๋ฃ์ ์ ์๋๋ก, ๋น๋ฐ์ง๋์ ์ํธ๋ฅผ ํด๋ ํ๋ ์์ ์ ๋์์ค ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
์
๋ ฅ ํ์
์ ๋ ฅ์ผ๋ก ์ง๋์ ํ ๋ณ ํฌ๊ธฐ n๊ณผ 2๊ฐ์ ์ ์ ๋ฐฐ์ด arr1, arr2๊ฐ ๋ค์ด์จ๋ค.
n โฆ 16arr1, arr2๋ ๊ธธ์ด n์ธ ์ ์ ๋ฐฐ์ด๋ก ์ฃผ์ด์ง๋ค.x๋ฅผ ์ด์ง์๋ก ๋ณํํ์ ๋์ ๊ธธ์ด๋ n ์ดํ์ด๋ค. ์ฆ, 0 โฆ x โฆ 2n - 1์ ๋ง์กฑํ๋ค.์ถ๋ ฅ ํ์
#, ๊ณต๋ฐฑ ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด ๋ฐฐ์ด๋ก ์ถ๋ ฅํ๋ผ.์
์ถ๋ ฅ ์์
| ๋งค๊ฐ๋ณ์ | ๊ฐ |
|---|---|
| n | 5 |
| arr1 | [9, 20, 28, 18, 11] |
| arr2 | [30, 1, 21, 17, 28] |
| ์ถ๋ ฅ | ["#####","# # #", "### #", "# ##", "#####"] |
| ๋งค๊ฐ๋ณ์ | ๊ฐ |
|---|---|
| n | 6 |
| arr1 | [46, 33, 33 ,22, 31, 50] |
| arr2 | [27 ,56, 19, 14, 14, 10] |
| ์ถ๋ ฅ | ["######", "### #", "## ##", " #### ", " #####", "### # "] |
๋์ ํ์ด
package programmers;
import java.util.Arrays;
public class SecretMap {
public static String[] solution(int n, int[] arr1, int[] arr2) {
String[] arr1Decoding = new String[n];
String[] arr2Decoding = new String[n];
for(int i = 0; i < arr1.length; i++) {
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
int value = arr1[i];
while(value > 0) {
sb1.append(value % 2);
value /= 2;
}
arr1Decoding[i] = sb1.reverse().toString();
while(arr1Decoding[i].length() < n) {
arr1Decoding[i] = "0" + arr1Decoding[i];
}
value = arr2[i];
while(value > 0) {
sb2.append(value % 2);
value /= 2;
}
arr2Decoding[i] = sb2.reverse().toString();]\
while(arr2Decoding[i].length() < n) {
arr2Decoding[i] = "0" + arr2Decoding[i];
}
}
String[] map = new String[n];
for (int i = 0; i < n; i++) {
int num1 = Integer.parseInt(arr1Decoding[i], 2);
int num2 = Integer.parseInt(arr2Decoding[i], 2);
int orResult = num1 | num2;
map[i] = String.format("%" + n +"s", Integer.toBinaryString(orResult)).replace(' ', '0');
}
for(int i = 0; i < n; i++) {
map[i] = map[i].replace('1', '#').replace('0', ' ');
}
System.out.println(Arrays.toString(map));
return map;
}
public static void main(String[] args) {
solution(6, new int[] {46,33,33,22,31,50}, new int[] {27,56,19,14,14,10});
}
}
๋์ ์๊ฐ
๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋ intํ ๋ฐฐ์ด arr1, arr2๋ฅผ 2์ง์๋ก ๋ด๊ธฐ ์ํ String[] ํ์
์ ๋ฐฐ์ด ์ ์ธ๊ณผ StringBuilder ๋ฅผ ์ด์ฉํ์ฌ ํด๋น ๋ก์ง์ ๊ตฌํํ์ฌ 2์ง์๋ก ๋ํ๋ด์๋ค.
int value = arr1[i];
while(value > 0) {
sb1.append(value % 2);
value /= 2;
}
arr1Decoding[i] = sb1.reverse().toString();
while(arr1Decoding[i].length() < n) {
arr1Decoding[i] = "0" + arr1Decoding[i];
}
value = arr2[i];
while(value > 0) {
sb2.append(value % 2);
value /= 2;
}
arr2Decoding[i] = sb2.reverse().toString();
while(arr2Decoding[i].length() < n) {
arr2Decoding[i] = "0" + arr2Decoding[i];
}
๊ทธ๋ฆฌ๊ณ ์๋ฆฌ์๋ฅผ ์ฒดํฌํ์ฌ ์๋ฆฌ์๊ฐ ๋งค๊ฐ๋ณ์ n๋ณด๋ค ์์ผ๋ฉด 0์ ์ฑ์ ์๋ฆฌ์๋ฅผ ๋ง์ถฐ์ฃผ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์๋ค. ์์ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด arr1Decoding, arr2Decoing ๋ฐฐ์ด์ 2์ง์๊ฐ ๋ด๊ธฐ๊ฒ ๋๋๋ฐ ๋ค์๊ณผ ๊ฐ์ ๋ก์ง์ ํตํด ๋๊ฐ์ ๋ฐฐ์ด์ OR ์ฐ์ฐ์ ํ์ฉํ์ฌ ๋ํด์ฃผ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์๋ฆฌ์๋ฅผ ์ฒดํฌํ์ฌ ๊ณต๋ฐฑ์ 0์ ์ถ๊ฐํ์๋ค. ์ต์ข
์ ์ผ๋ก ๋์ค๋ ๊ฒฐ๊ณผ๋ฅผ 1์ #์ผ๋ก, 0์ ๊ณต๋ฐฑ์ผ๋ก ๋ณํํ์ฌ ๋ฆฌํด
String[] map = new String[n];
for (int i = 0; i < n; i++) {
int num1 = Integer.parseInt(arr1Decoding[i], 2);
int num2 = Integer.parseInt(arr2Decoding[i], 2);
int orResult = num1 | num2;
map[i] = String.format("%" + n +"s", Integer.toBinaryString(orResult)).replace(' ', '0');
}
for(int i = 0; i < n; i++) {
map[i] = map[i].replace('1', '#').replace('0', ' ');
}
System.out.println(Arrays.toString(map));
return map;
ํด๋ฆฐ ์ฝ๋๋ก ์์ฑ๋ ์ฝ๋
package programmers;
import java.util.Arrays;
public class SecretMap {
public static String[] solution(int n, int[] arr1, int[] arr2) {
String[] map = new String[n];
for (int i = 0; i < n; i++) {
String binary = Integer.toBinaryString(arr1[i] | arr2[i]);
String formattedBinary = String.format("%" + n + "s", binary).replace(' ', '0');
map[i] = formattedBinary.replace('1', '#').replace('0', ' ');
}
System.out.println(Arrays.toString(map));
return map;
}
public static void main(String[] args) {
solution(6, new int[] {46,33,33,22,31,50}, new int[] {27,56,19,14,14,10});
}
}
ํด๋ฆฐ์ฝ๋ ๋ฆฌ๋ทฐ
| ๋ด๊ฐ ๊ตฌํํ ๋ก์ง | ํด๋ฆฐ์ฝ๋๋ก ๊ตฌํ๋ ๋ก์ง |
|---|---|
![]() | ![]() |
๋ด๊ฐ ๊ตฌํํ ๋ก์ง๊ณผ ํด๋ฆฐ ์ฝ๋๋ก ์์ฑ๋ ๋ก์ง์ ๋น๊ตํด์ ๋ณด๋ฉด ์ผ๋ง๋ ๊ฐ๋จํ๊ฒ ์ด๋ฅผ ๊ตฌํํ๋์ง ๋ณผ ์ ์๋ค. ๋๋ 2์ง์ ๋ณํ๊ณผ, 2์ง์ OR์ฐ์ฐ์ ๋ณต์กํ ๊ณผ์ ์ผ๋ก ๊ตฌํํ๋ค๋ฉด ํด๋ฆฐ์ฝ๋๋ ๊ฐ๋จํ Integer.toBinaryString() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฑ ๊ฐ๋จํ๊ฒ ์ด๋ฅผ ๊ตฌํํ์๋ค. ๋ถํ์ํ StringBuilder ๊ฐ์ฒด ์ ์ธ ๋ฐ String[] ๋ฐฐ์ด์ ์์ฑ ์์ด String ๋ฌธ์ ํ๋๋ง ์ ์ธํ์ฌ
arr1[i]|arr2[i]์ผ๋ก ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก binary์ ํ ๋นํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํฌ๊ฒ ์ค ์ผ์์์๋ค. ์ถ๊ฐ๋ก String.format(), String.replace() ๋ฉ์๋๋ฅผ ์ ๊ทน ํ์ฉํ์ฌ ์๋ฆฌ์ ๊ณ ์ ๋ฐ ๊ณต๋ฐฑ์ 0์ผ๋ก ์ฑ์ฐ๋ ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ๊ตฌํํ์๋ค.

๐ ๋ฌธ4) ๋ค์ค์ ํ๋ก๋๊ฐ ์ซ์๋์ด๋ฅผ ํ๊ณ ์์ต๋๋ค. ๋ค์ค๊ฐ ํ๋ก๋์๊ฒ ์ซ์๋ฅผ ๊ฑด๋ฌ ๋ ์ผ๋ถ ์๋ฆฟ์๋ฅผ ์๋จ์ด๋ก ๋ฐ๊พผ ์นด๋๋ฅผ ๊ฑด๋ค์ฃผ๋ฉด ํ๋ก๋๋ ์๋ ์ซ์๋ฅผ ์ฐพ๋ ๊ฒ์์ ๋๋ค.
๋ค์์ ์ซ์์ ์ผ๋ถ ์๋ฆฟ์๋ฅผ ์๋จ์ด๋ก ๋ฐ๊พธ๋ ์์์ ๋๋ค.
์ด๋ ๊ฒ ์ซ์์ ์ผ๋ถ ์๋ฆฟ์๊ฐ ์๋จ์ด๋ก ๋ฐ๋์ด์ก๊ฑฐ๋, ํน์ ๋ฐ๋์ง ์๊ณ ๊ทธ๋๋ก์ธ ๋ฌธ์์ด s๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. s๊ฐ ์๋ฏธํ๋ ์๋ ์ซ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ฐธ๊ณ ๋ก ๊ฐ ์ซ์์ ๋์๋๋ ์๋จ์ด๋ ๋ค์ ํ์ ๊ฐ์ต๋๋ค.
| ์ซ์ | ์๋จ์ด |
|---|---|
| 0 | zero |
| 1 | one |
| 2 | two |
| 3 | three |
| 4 | four |
| 5 | five |
| 6 | six |
| 7 | seven |
| 8 | eight |
| 9 | nine |
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
| s | result |
|---|---|
| "one4seveneight" | 1478 |
| "23four5six7" | 234567 |
| "2three45sixseven" | 234567 |
| "123" | 123 |
์ ํ์๊ฐ
๋์ ํ์ด
package programmers;
import java.util.HashMap;
import java.util.Map;
public class NumericString {
public static int solution(String s) {
Map<String, String> numList = new HashMap<>();
numList.put("zero", "0");
numList.put("one", "1");
numList.put("two", "2");
numList.put("three", "3");
numList.put("four", "4");
numList.put("five", "5");
numList.put("six", "6");
numList.put("seven", "7");
numList.put("eight", "8");
numList.put("nine", "9");
for(Map.Entry<String, String> entry : numList.entrySet()) {
s = s.replaceAll(entry.getKey(), entry.getValue());
}
return Integer.parseInt(s);
}
public static void main(String[] args) {
solution("one4seveneight");
}
}
๋์ ํ์ด
Map ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด Key์ value๋ฅผ ์ ์ฅํ ์ ์์ผ๋ฏ๋ก, ์ซ์ ๋ฌธ์ (zero, one, two, three...)๋ฅผ key, value๋ฅผ (0,1,2,3...)์ผ๋ก ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ Map ์ธํฐํ์ด์ค์๋ Entry ๋ด๋ถ ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ๋ฉด, Map์ key์ value๋ฅผ ๊ฒ์ฌํ ์ ์๋ ์ ์ ํ์ฉํ์ฌ, ๋งค๊ฐ๋ณ์ s์ key์ ๋งคํ๋๋ฉด ์ด๋ฅผ value๊ฐ์ผ๋ก ๋ณํํ์ฌ Integer.parseInt()๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์๋ฅผ ๋ค์ ์ซ์๋ก ๋ณํํ์ฌ ๋ฆฌํดํ์๋ค.
ํด๋ฆฐ ์ฝ๋ ์์ฑ
class Solution {
public int solution(String s) {
String[] strArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for(int i = 0; i < strArr.length; i++) {
s = s.replaceAll(strArr[i], Integer.toString(i));
}
return Integer.parseInt(s);
}
}
for(int i = 0; i < strArr.length; i++) {
s = s.replaceAll(strArr[i], Integer.toString(i));
}
ํต์ฌ ๋ก์ง์ ๋ณด๋ฉด, String[] strArr = {"zero","one","two"...}; ๋ฐฐ์ด์ ์ ์ธ๊ณผ ๋์์ ํ ๋นํ์ฌ ๋ฐ๋ณต๋ฌธ์ ํตํด, ๋ฌธ์ ๋ฐฐ์ด์ ํด๋น ๋ฌธ์์ ๋ํ ์ธ๋ฑ์ค๋ฅผ Integer.toString() ์ผ๋ก ๋ฐ๋ก ์ซ์๋ก ๋ณํํ์ฌ ๋ฆฌํดํด์ฃผ์๋ค.
๐ ๋ฌธ5) ๋ฌธ์์ด๋ก ๊ตฌ์ฑ๋ ๋ฆฌ์คํธ strings์, ์ ์ n์ด ์ฃผ์ด์ก์ ๋, ๊ฐ ๋ฌธ์์ด์ ์ธ๋ฑ์ค n๋ฒ์งธ ๊ธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ ค ํฉ๋๋ค. ์๋ฅผ ๋ค์ด strings๊ฐ ["sun", "bed", "car"]์ด๊ณ n์ด 1์ด๋ฉด ๊ฐ ๋จ์ด์ ์ธ๋ฑ์ค 1์ ๋ฌธ์ "u", "e", "a"๋ก strings๋ฅผ ์ ๋ ฌํฉ๋๋ค.
์ ํ ์กฐ๊ฑด
์
์ถ๋ ฅ ์
| string | n | return |
|---|---|---|
["sun", "bed", "car"] | 1 | ["car", "bed", "sun"] |
["abce", "abcd", "cdx"] | 2 | ["abcd", "abce", "cdx"] |
์
์ถ๋ ฅ ์ ์ค๋ช
๋์ ํ์ด
์๋ชป ์๊ฐํ ํ์ด
package programmers;
import java.util.Arrays;
public class TextAlignment {
public static String[] solution(String[] strings, int n) {
String[] answer = {};
String[] sorts = new String[strings.length];
for(int i = 0; i < strings.length; i++) {
sorts[i] = Character.toString(strings[i].charAt(n));
}
Arrays.sort(sorts);
System.out.println(Arrays.toString(sorts));
System.out.println(Arrays.toString(strings));
for(int i = 0; i < strings.length; i++) {
if(Character.toString(strings[i].charAt(n)).equals(sorts[i]) ) {
System.out.println(strings[i]);
}
}
return answer;
}
public static void main(String[] args) {
solution(new String[] {"cdx", "abce", "abcd"}, 2);
}
}
๋งค๊ฐ๋ณ์ Strings[] strings index ๋ณ๋ก x, c, c ๊น์ง ๋ฝ์ ๋ด๋๊ฑฐ ๊น์ง๋ ์ฑ๊ณตํ๋๋ฐ, ํด๋น ์ธ๋ฑ์ค ๋ณ๋ก ์ฌ์ ๋ ฌ์ ํ๋ ค๊ณ ํ๋ ํด๊ฒฐํ๊ธฐ๊ฐ ์ฝ์ง์์๋ค.
๋ค์์ ๋๋คํํ์์ ์ฌ์ฉํ ์ฑ๊ณต ๋ก์ง์ด๋ค.
package programmers;
import java.util.Arrays;
public class TextAlignment {
public static String[] solution(String[] strings, int n) {
Arrays.sort(strings);
Arrays.sort(strings, (s1, s2) -> s1.charAt(n) - s2.charAt(n));
return strings;
}
public static void main(String[] args) {
solution(new String[] {"cdx", "abce", "abcd"}, 2);
}
}
๋์ ์๊ฐ
Arrays.sort(strings) ์ ๋ฐฐ์ด ์ ์ฒด๋ฅผ ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ๋ค. ์ด๋์ ์์๋
abcd,abce,cdxArrays.sort(strings, (s1, s2) -> s1.charAt(n) - s2.charAt(n) ๋ ๋ ๋ฌธ์์ด s1๊ณผ s2๋ฅผ ๋น๊ตํ๋ Comparator๋ฅผ ์ ์ํ๋ค.
abcd,abce ๋ฅผ ๋น๊ตํ์ฌ, ๋ ๋ฌธ์์ด์ 2๋ฒ์งธ ์ธ๋ฑ์ค ๋ฌธ์๋ ๋ ๋ค c์ด๋ฏ๋ก, ๋ฌธ์์ ์ฐจ์ด๋ 0, ๋ฐ๋ผ์ ๋ ๋ฌธ์์ด์ ์์๋ ๋ณ๊ฒฝ๋์ง ์์abce,cdx๋ฅผ ๋น๊ตํ์ฌ ๋ ๋ฌธ์์ด์ 2๋ฒ์งธ ์ธ๋ฑ์ค ๋ฌธ์๋ c, x ์ด๋ฏ๋ก, c์ x์ ์ฐจ์ด๋ ์์๊ฐ ๋๋ฏ๋ก abce๋ cdx๋ณด๋ค ์์ ์ค๊ฒ ๋จabcd,cdx ๋ ๋ง์ฐฌ๊ฐ์ง๋ก cdx๋ณด๋ค ์์ ์ค๊ฒ ๋จ๋ฐ๋ผ์, ์์ ํ ์ ๋ ฌ๋ ๋ฌธ์์ด ๋ฐฐ์ด abcd,abce,cdx๋ฅผ ๋ฐํํจ
๋๋ค, ์คํธ๋ฆผ์ ์ฐ์ง ์๋ ์์ด๋์ด
class Solution {
public String[] solution(String[] strings, int n) {
String[] answer = {};
ArrayList<String> arr = new ArrayList<>();
for (int i = 0; i < strings.length; i++) {
arr.add("" + strings[i].charAt(n) + strings[i]);
}
Collections.sort(arr);
answer = new String[arr.size()];
for (int i = 0; i < arr.size(); i++) {
answer[i] = arr.get(i).substring(1, arr.get(i).length());
}
return answer;
}
}
ํ์ด

๊ทธ๋ฆฌ๊ณ Collections.sort(arr) ๋ฅผ ํตํด ์ ๋ ฌ์ ์ํค๋๋ฐ ์ด๋ n๋ฒ์จฐ index๊ฐ ํฌํจ๋์ด ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๋ค.
answer[i] = arr.get(i).subString(1, arr.get(i).length() ๋ฅผ ํตํด ๋งจ ์๊ธ์ (n ๋ฒ์งธ index)๋ฅผ ์ง์ด๋ค.
