๐ฅ
https://programmers.co.kr/learn/courses/30/lessons/17681?language=java#
์ฝ๋ฉํ ์คํธ ์ฐ์ต - [1์ฐจ] ๋น๋ฐ์ง๋
๋น๋ฐ์ง๋ ๋ค์ค๋ ํ์ ํ๋ก๋๊ฐ ๋น์๊ธ์ ์จ๊ฒจ๋๋ ์ฅ์๋ฅผ ์๋ ค์ค ๋น๋ฐ์ง๋๋ฅผ ์์ ๋ฃ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋น๋ฐ์ง๋๋ ์ซ์๋ก ์ํธํ๋์ด ์์ด ์์น๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ ์ํธ๋ฅผ ํด๋ ํด์ผ ํ๋ค. ๋ค
programmers.co.kr
๋ฌธ์ ์ค๋ช
๋น๋ฐ์ง๋
๋ค์ค๋ ํ์ ํ๋ก๋๊ฐ ๋น์๊ธ์ ์จ๊ฒจ๋๋ ์ฅ์๋ฅผ ์๋ ค์ค ๋น๋ฐ์ง๋๋ฅผ ์์ ๋ฃ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋น๋ฐ์ง๋๋ ์ซ์๋ก ์ํธํ๋์ด ์์ด ์์น๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ ์ํธ๋ฅผ ํด๋ ํด์ผ ํ๋ค. ๋คํํ ์ง๋ ์ํธ๋ฅผ ํด๋ ํ ๋ฐฉ๋ฒ์ ์ ์ด๋์ ๋ฉ๋ชจ๋ ํจ๊ป ๋ฐ๊ฒฌํ๋ค.
- ์ง๋๋ ํ ๋ณ์ ๊ธธ์ด๊ฐ n์ธ ์ ์ฌ๊ฐํ ๋ฐฐ์ด ํํ๋ก, ๊ฐ ์นธ์ "๊ณต๋ฐฑ"(" ") ๋๋ "๋ฒฝ"("#") ๋ ์ข ๋ฅ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ์ ์ฒด ์ง๋๋ ๋ ์ฅ์ ์ง๋๋ฅผ ๊ฒน์ณ์ ์ป์ ์ ์๋ค. ๊ฐ๊ฐ "์ง๋ 1"๊ณผ "์ง๋ 2"๋ผ๊ณ ํ์. ์ง๋ 1 ๋๋ ์ง๋ 2 ์ค ์ด๋ ํ๋๋ผ๋ ๋ฒฝ์ธ ๋ถ๋ถ์ ์ ์ฒด ์ง๋์์๋ ๋ฒฝ์ด๋ค. ์ง๋ 1๊ณผ ์ง๋ 2์์ ๋ชจ๋ ๊ณต๋ฐฑ์ธ ๋ถ๋ถ์ ์ ์ฒด ์ง๋์์๋ ๊ณต๋ฐฑ์ด๋ค.
- "์ง๋ 1"๊ณผ "์ง๋ 2"๋ ๊ฐ๊ฐ ์ ์ ๋ฐฐ์ด๋ก ์ํธํ๋์ด ์๋ค.
- ์ํธํ๋ ๋ฐฐ์ด์ ์ง๋์ ๊ฐ ๊ฐ๋ก์ค์์ ๋ฒฝ ๋ถ๋ถ์ 1, ๊ณต๋ฐฑ ๋ถ๋ถ์ 0์ผ๋ก ๋ถํธํํ์ ๋ ์ป์ด์ง๋ ์ด์ง์์ ํด๋นํ๋ ๊ฐ์ ๋ฐฐ์ด์ด๋ค.

๋ค์ค๊ฐ ํ๋ก๋์ ๋น์๊ธ์ ์์ ๋ฃ์ ์ ์๋๋ก, ๋น๋ฐ์ง๋์ ์ํธ๋ฅผ ํด๋ ํ๋ ์์ ์ ๋์์ค ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
์ ๋ ฅ ํ์
์ ๋ ฅ์ผ๋ก ์ง๋์ ํ ๋ณ ํฌ๊ธฐ n ๊ณผ 2๊ฐ์ ์ ์ ๋ฐฐ์ด arr1, arr2๊ฐ ๋ค์ด์จ๋ค.
- 1 โฆ n โฆ 16
- arr1, 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] |
์ถ๋ ฅ | ["######", "### #", "## ##", " #### ", " #####", "### # "] |
๐ฅ [๋ก์ง]
arr1๋ฐฐ์ด๊ณผ arr2๋ฐฐ์ด์ ์๋ ์ซ์๋ฅผ ์ฐจ๋ก๋๋ก ๋ถ๋ฌ์์ 2์ง์๋ก ๋ณํํ์๋์ ์ฒซ๋ฒ์งธ ์๋ฆฌ์๋ถํฐ n๋ฒ์งธ ์๋ฆฌ์๊น์ง๋ฅผ ๊ณ์ฐํ๋ค(๊ฐ๊ฐ flag1, flag2์ ์ ์ฅ)
flag1๊ณผ flag2 ๋ชจ๋ 0์ธ ๊ฒฝ์ฐ ๋ฒฝ์ด ์๋ค๋ ์๋ฏธ์ด๊ธฐ๋๋ฌธ์ " "์ถ๊ฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ๋ฒฝ์ด ์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ "#"๋ฅผ ์ถ๊ฐํ๋ค.
answer๋ฐฐ์ด์ ์์ ๊ณ์ฐํ String ๊ฐ์ ์ง์ด๋ฃ์ด์ฃผ๊ณ ๊ทธ ๋ค์ ๊ฐ์ ๊บผ๋ด์ ํ์ํ๋ค.
๐ฅ [์ต์ข ์ฝ๋]
import java.lang.Math;
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for(int j = 0; j < n; j++) {
int num1 = arr1[j];
int num2 = arr2[j];
String tmp = "";
for(int i = 0; i < n; i++) {
int flag1 = (int)(num1 / Math.pow(2,n-i-1));
int flag2 = (int)(num2 / Math.pow(2,n-i-1));
//์ด๋ ํ์ชฝ์ด๋ผ๋ ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ
if(flag1 == 0 && flag2 == 0) {
tmp += " ";
} else {
tmp += "#";
}
if(flag1 == 1)
num1 -= Math.pow(2,n-i-1);
if(flag2 == 1)
num2 -= Math.pow(2,n-i-1);
}
answer[j] = tmp;
}
return answer;
}
}
๐ฅ [์๊ฐ]
๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์๊ฒ ํ์๋๋ฐ ๋ค๋ฅธ์ฌ๋๋ค์ ํ์ด ์ฝ๋๋ฅผ ๋ณด๊ณ ๋ฐ์ฑํ๊ฒ ๋๋ค ใ ใ
for๋ฌธ์ ๋ ๋ฒ ์ฌ์ฉํ๋ ํํ๋ผ ์ํ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆด๊ฒ์ด๋ผ๋ ์์ธก์ ํ์ง๋ง ๋์ด์์ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์๊ฐํ๋๋ฐ
String[] result = new String[n];
for (int i = 0; i < n; i++) {
result[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
}
for (int i = 0; i < n; i++) {
result[i] = String.format("%" + n + "s", result[i]);
result[i] = result[i].replaceAll("1", "#");
result[i] = result[i].replaceAll("0", " ");
}
return result;
์ด๋ฐ ๋ฐฉ๋ฒ์ด ์์๋ค. arr1๊ณผ arr2๋ฅผ or ์ฐ์ฐ์ ํ๊ณ ์ด๋ฅผ binaryํํ๋ก ๋ณํํ๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ๊ณ์ฐํ ์ ์์๋ค.
๊ทผ๋ฐ ์ด ํจ์๋ฅผ ์ฌ์ฉํ์๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ 9์ธ๊ฒฝ์ฐ 1001 ์ด๋ฐ์์ผ๋ก ๋ค์ฏ์๋ฆฌ์ด๋๋ผ๋ ์์ 0์ด ๋น ์ ธ๋ฒ๋ฆฐ๋ค๋๊ฒ์ธ๋ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํด String.format์ ์ฌ์ฉํด ์์ ์ซ์๋ฅผ 0์ผ๋ก ์ฑ์์ค๋ค.
or์ฐ์ฐ์ ํ ๊ฐ(result)์ ๊ฐ๊ฐ 1์ธ๊ฒฝ์ฐ #๋ก, 0์ธ ๊ฒฝ์ฐ ๊ณต๋ฐฑ์ผ๋ก replaceAllํจ์๋ฅผ ์ด์ฉํด ๋ณ๊ฒฝํด์ฃผ๋ฉด ์ ๋ง ์์์๊ฐ์ ๋ง์ด ์ค์ด๋ฉด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๋ฌธ์ ๋ฅผ ๋จ์ํ ๋น ๋ฅด๊ฒ ํ ๊ฒ์ด ์๋๋ผ ํจ์จ์ ์ผ๋ก ํธ๋ ๋ฐฉ๋ฒ์ ๊ณต๋ถํ๊ณ ์ฐ๊ตฌํ๋ ์ฌ๋์ด ๋์ด์ผ๊ฒ ์์ ๋๊ผ๋ค.
์ฝํ ์ค๋น๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์ํ์ง ์ผ๋ง ๋์ง ์์ ์ฝ๋์ ๋ฏธํกํ ์ ์ด ๋ง์ ์ ์์ต๋๋ค.
๋ถ์กฑํ ์ ํผ๋๋ฐฑ ์ฃผ์๋ฉด ์์ผ๋ก์ ํฌ์คํ ์ ๋ฐ์ํ๊ฒ ์ต๋๋ค! ๋ด์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค :)
-budtree