๐ ๋ฌธ1) n๊ฐ์ ์์ด ์๋ ์ ์๋ค์ด ์์ต๋๋ค. ์ด ์ ์๋ค์ ์์๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์ ์ ํ ๋ํ๊ฑฐ๋ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด [1, 1, 1, 1, 1]๋ก ์ซ์ 3์ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ค์ฏ ๋ฐฉ๋ฒ์ ์ธ ์ ์์ต๋๋ค.
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
์ฌ์ฉํ ์ ์๋ ์ซ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด numbers, ํ๊ฒ ๋๋ฒ target์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ์ซ์๋ฅผ ์ ์ ํ ๋ํ๊ณ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
| numbers | target | return |
|---|---|---|
[1,1,1,1,1] | 3 | 5 |
[4,1,2,1] | 4 | 2 |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #2
+4+1-2+1 = 4
+4-1+2-1 = 4
๋์ ํ์ด
package programmers;
import java.util.Arrays;
public class TargetNumber {
private static int answer = 0;
public static int solution(int[] numbers, int target) {
answer = 0;
char[] signs = new char[numbers.length];
dfs(numbers, signs, 0, target);
return answer;
}
public static void dfs(int[] numbers, char[] signs, int index, int target) {
if (index == numbers.length) {
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
if (signs[i] == '+') {
sum += numbers[i];
} else {
sum -= numbers[i];
}
}
if (sum == target) {
answer++;
}
return;
}
signs[index] = '+';
dfs(numbers, signs, index + 1,target);
signs[index] = '-';
dfs(numbers, signs, index + 1,target);
}
public static void main(String[] args) {
int[] numbers = {1,1,1,1,1};
solution(numbers, 3);
}
}
DFS๋ฅผ ์ฌ์ฉํ ๋ค๋ฅธ ํ์ด
package programmers;
public class TargetNumber {
private static int answer = 0;
public static int solution(int[] numbers, int target) {
answer = 0;
dfs(numbers, target, 0, 0);
return answer;
}
public static void dfs(int[] numbers, int target, int index, int sum) {
if (index == numbers.length) {
if(sum == target) {
answer++;
}
return;
}
dfs(numbers, target, index + 1, sum + numbers[index]);
dfs(numbers, target, index + 1, sum - numbers[index]);
}
public static void main(String[] args) {
int[] numbers = {1,1,1,1,1};
solution(numbers, 3);
}
}
๐ ๋ฌธ2) ์ ํ๋ฒํธ๋ถ์ ์ ํ ์ ํ๋ฒํธ ์ค, ํ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋ฒํธ์ ์ ๋์ด์ธ ๊ฒฝ์ฐ๊ฐ ์๋์ง ํ์ธํ๋ ค ํฉ๋๋ค.
์ ํ๋ฒํธ๊ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ, ๊ตฌ์กฐ๋ ์ ํ๋ฒํธ๋ ์์์ด์ ์ ํ๋ฒํธ์ ์ ๋์ฌ์
๋๋ค.
์ ํ๋ฒํธ๋ถ์ ์ ํ ์ ํ๋ฒํธ๋ฅผ ๋ด์ ๋ฐฐ์ด phone_book ์ด solution ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ด๋ค ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋ฒํธ์ ์ ๋์ด์ธ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฉด false๋ฅผ ๊ทธ๋ ์ง ์์ผ๋ฉด true๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
์
์ถ๋ ฅ ์์
| phone_book | return |
|---|---|
["119", "97674223", "1195524421"] | false |
["123","456","789"] | true |
["12","123","1235","567","88"] | false |
๋์ ํ์ด
ํจ์จ์ฑ ์๊ฐ ์ด๊ณผ ๋ก์ง
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
for(int i = 0; i < phone_book.length - 1; i++) {
String phoneNumber = phone_book[i];
for (int j = i + 1; j < phone_book.length; j++) {
if (phoneNumber.length() <= phone_book[j].length()
&& phone_book[j].substring(0, phoneNumber.length()).equals(phoneNumber)) {
answer = false;
}
if (phoneNumber.length() > phone_book[j].length()
&& phoneNumber.substring(0, phone_book[j].length()).equals(phone_book[j])) {
answer = false;
}
}
}
return answer;
}
}
package programmers;
import java.util.Arrays;
public class NumberList {
public static boolean solution(String[] phone_book) {
boolean answer = true;
Arrays.sort(phone_book);
for(int i = 0; i < phone_book.length - 1; i++) {
if(phone_book[i+1].startsWith(phone_book[i])) {
answer = false;
}
}
return answer;
}
public static void main(String[] args) {
String[] phone_book = {"12", "88", "123", "567", "1235"};
solution(phone_book);
}
}
๐ ๋ฌธ3) ์์ ์ ์ n์ด ์ฃผ์ด์ง๋๋ค. ์ด ์ซ์๋ฅผ k์ง์๋ก ๋ฐ๊ฟจ์ ๋, ๋ณํ๋ ์ ์์ ์๋ ์กฐ๊ฑด์ ๋ง๋ ์์(Prime number)๊ฐ ๋ช ๊ฐ์ธ์ง ์์๋ณด๋ ค ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, 437674์ 3์ง์๋ก ๋ฐ๊พธ๋ฉด 211020101011์ ๋๋ค. ์ฌ๊ธฐ์ ์ฐพ์ ์ ์๋ ์กฐ๊ฑด์ ๋ง๋ ์์๋ ์ผ์ชฝ๋ถํฐ ์์๋๋ก 211, 2, 11์ด ์์ผ๋ฉฐ, ์ด 3๊ฐ์ ๋๋ค. (211, 2, 11์ k์ง๋ฒ์ผ๋ก ๋ณด์์ ๋๊ฐ ์๋, 10์ง๋ฒ์ผ๋ก ๋ณด์์ ๋ ์์์ฌ์ผ ํ๋ค๋ ์ ์ ์ฃผ์ํฉ๋๋ค.) 211์ P0 ํํ์์ ์ฐพ์ ์ ์์ผ๋ฉฐ, 2๋ 0P0์์, 11์ 0P์์ ์ฐพ์ ์ ์์ต๋๋ค.
์ ์ n๊ณผ k๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. n์ k์ง์๋ก ๋ฐ๊ฟจ์ ๋, ๋ณํ๋ ์ ์์์ ์ฐพ์ ์ ์๋ ์ ์กฐ๊ฑด์ ๋ง๋ ์์์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
| n | k | result |
|---|---|---|
| 437674 | 3 | 3 |
| 110011 | 10 | 2 |
๋์ ํ์ด
package programmers;
public class KPrimeNumber {
public static int solution(int n, int k) {
int answer = 0;
StringBuilder nPrimeNumber = new StringBuilder();
while(n > 0) {
int remainder = n % k ;
nPrimeNumber.insert(0, remainder);
n /= k;
}
String[] str = nPrimeNumber.toString().split("0");
for(String s : str) {
if(s.isEmpty() || s.equals("1")) {
continue;
}
long primeNumber = Long.parseLong(s);
boolean isPrime = true;
for(long j = 2; j*j <= primeNumber; j++) {
if(primeNumber % j == 0) {
isPrime = false;
break;
}
}
if(isPrime) {
answer++;
}
}
return answer;
}
public static void main(String[] args) {
solution(110011, 10);
}
}
๋์ ์๊ฐ
๋งค๊ฐ๋ณ์ n์ ๋จผ์ n์ง์๋ก ๋ณํํ๋ ์์ ์ด ๋จผ์ ํ์ํ๋ค.
StringBuilder nPrimeNumber = new StringBuilder();
while(n > 0) {
int remainder = n % k ;
nPrimeNumber.insert(0, remainder);
n /= k;
}
๋ฌธ์ ์์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ์ดํด๋ณด๋ฉด
0P0
P0
0P
P
์ฆ 0์ ๊ธฐ์ค์ผ๋ก ์๋ฅด๋ฉด๋๋ค.
์ฌ๊ธฐ์ 00 ์ด๋ ๊ฒ ๋๊ฐ๊ฐ ์ฐ์์ผ๋ก ๋์ค๋ฉด ๋ฌธ์์ด์ ๋น๊ฐ์ผ๋ก ๋ค์ด๊ฐ๊ธฐ๋๋ฌธ์ ์ด๋ฅผ ๋์ค์ ์ฒดํฌํด์ฃผ๋ฉด๋๋ค.

๋ด๊ฐ ์๊ฐํ์๋๋, ๋น๊ฐ์ผ๋ก ๋์จ ๋ถ๋ถ์ ์ด์ฐจํผ 0์ผ๋ก ์ชผ๊ฐ์ด ๋์จ ๊ฐ์ด๊ธฐ๋๋ฌธ์ ์ด๋ฅผ ๊ทธ๋ฅ continue๋ฌธ์ผ๋ก ๋ณด๋ด๋ฒ๋ฆฌ๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค.
for(String s : str) {
if(s.isEmpty() || s.equals("1")) {
continue;
}
long primeNumber = Long.parseLong(s);
boolean isPrime = true;
for(long j = 2; j*j <= primeNumber; j++) {
if(primeNumber % j == 0) {
isPrime = false;
break;
}
}
if(isPrime) {
answer++;
}
}
for๋ฌธ์ ์ํํ๋ฉฐ s.isEmpty() ๋๋ s์ ๊ฐ์ด "1"๊ณผ ๊ฐ์ผ๋ฉด continue ์ ์์ ์ธ ๊ฐ์ด ๋์ค๋ฉด ์ด๋ฅผ Long ํ์
์ผ๋ก ๋ณํ ๋ค ์์ ํ๋ณ ๋ก์ง์ ํตํด ์์๋ฅผ ํ๋ณํ๋ค.
๐ ๋ฌธ4) ์ ์ ์ฌ์ ์ดํผ์น๋ ์นด์นด์คํก์ผ๋ก ์ ์ก๋๋ ๋ฉ์์ง๋ฅผ ์์ถํ์ฌ ์ ์ก ํจ์จ์ ๋์ด๋ ์ ๋ฌด๋ฅผ ๋งก๊ฒ ๋์๋ค. ๋ฉ์์ง๋ฅผ ์์ถํ๋๋ผ๋ ์ ๋ฌ๋๋ ์ ๋ณด๊ฐ ๋ฐ๋์ด์๋ ์ ๋๋ฏ๋ก, ์์ถ ์ ์ ์ ๋ณด๋ฅผ ์๋ฒฝํ๊ฒ ๋ณต์ ๊ฐ๋ฅํ ๋ฌด์์ค ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ธฐ๋ก ํ๋ค.
์ดํผ์น๋ ์ฌ๋ฌ ์์ถ ์๊ณ ๋ฆฌ์ฆ ์ค์์ ์ฑ๋ฅ์ด ์ข๊ณ ๊ตฌํ์ด ๊ฐ๋จํ LZW(LempelโZivโWelch) ์์ถ์ ๊ตฌํํ๊ธฐ๋ก ํ๋ค. LZW ์์ถ์ 1983๋ ๋ฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ์ด๋ฏธ์ง ํ์ผ ํฌ๋งท์ธ GIF ๋ฑ ๋ค์ํ ์์ฉ์์ ์ฌ์ฉ๋์๋ค.
LZW ์์ถ์ ๋ค์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
์์ถ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ฌธ ๋๋ฌธ์๋ง ์ฒ๋ฆฌํ๋ค๊ณ ํ ๋, ์ฌ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๊ธฐํ๋๋ค. ์ฌ์ ์ ์์ธ ๋ฒํธ๋ ์ ์๊ฐ์ผ๋ก ์ฃผ์ด์ง๋ฉฐ, 1๋ถํฐ ์์ํ๋ค๊ณ ํ์.
| ์์ธ๋ฒํธ | 1 | 2 | 3 | ... | 24 | 25 | 26 |
|---|---|---|---|---|---|---|---|
| ๋จ์ด | A | B | C | ... | X | Y | Z |
์๋ฅผ ๋ค์ด ์ ๋ ฅ์ผ๋ก KAKAO๊ฐ ๋ค์ด์จ๋ค๊ณ ํ์.
| ํ์ฌ ์ ๋ ฅ(w) | ๋ค์ ๊ธ์(c) | ์ถ๋ ฅ | ์ฌ์ ์ถ๊ฐ(w+c) |
|---|---|---|---|
| K | A | 11 | 27:KA |
| A | K | 1 | 28:AK |
| O | 15 |
์ด ๊ณผ์ ์ ๊ฑฐ์ณ ๋ค์ฏ ๊ธ์์ ๋ฌธ์ฅ KAKAO๊ฐ 4๊ฐ์ ์์ธ ๋ฒํธ [11, 1, 27, 15]๋ก ์์ถ๋๋ค.
์
๋ ฅ์ผ๋ก TOBEORNOTTOBEORTOBEORNOT๊ฐ ๋ค์ด์ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ถ์ด ์งํ๋๋ค.
| ํ์ฌ ์ ๋ ฅ(w) | ๋ค์ ๊ธ์(c) | ์ถ๋ ฅ | ์ฌ์ ์ถ๊ฐ(w+c) |
|---|---|---|---|
| T | O | 20 | 27:TO |
| O | B | 15 | 28:OB |
| B | E | 2 | 29:BE |
| E | O | 5 | 30:EO |
| O | R | 15 | 31:OR |
| R | N | 18 | 32:RN |
| N | O | 14 | 33:NO |
| O | T | 15 | 34:OT |
| T | T | 20 | 35:TT |
| TO | B | 27 | 36:TOB |
| BE | O | 29 | 37:BEO |
| OR | T | 31 | 38:ORT |
| TOB | E | 36 | 39:TOBE |
| EO | R | 30 | 40:EOR |
| RN | O | 32 | 41:RNO |
| OT | 34 |
์
์ถ๋ ฅ ์์
| msg | answer |
|---|---|
| KAKAO | [11, 1, 27, 15] |
| TOBEORNOTTOBEORTOBEORNOT | [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34] |
| ABABABABABABABAB | [1, 2, 27, 29, 28, 31, 30] |
๋์ ํ์ด
package programmers;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
public class Compression {
public static int[] solution(String msg) {
LinkedHashMap<String, Integer> dictionary = new LinkedHashMap<>();
List<Integer> result = new ArrayList<>();
int index = 1;
for (char ch = 'A'; ch <= 'Z'; ch++) {
dictionary.put(String.valueOf(ch), index++);
}
StringBuilder sb = new StringBuilder(msg);
while(sb.length() > 0) {
int i ;
for(i = 1; i <= sb.length(); i++) {
if(!dictionary.containsKey(sb.substring(0, i))) {
break;
}
}
String found = sb.substring(0, i - 1);
result.add(dictionary.get(found));
if(i <= sb.length()) {
dictionary.put(found + sb.charAt(i - 1), index++);
}
sb.delete(0, i - 1);
}
int[] answer = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
answer[i] = result.get(i);
}
return answer;
}
public static void main(String[] args) {
solution("KAKAO");
}
}
๋์ ์๊ฐ
LinkedHashMap<String, Integer> dictionary = new LinkedHashMap<>();
List<Integer> result = new ArrayList<>();
int index = 1;
for (char ch = 'A'; ch <= 'Z'; ch++) {
dictionary.put(String.valueOf(ch), index++);
}
๋จผ์ A-Z key ๊ฐ์ 1~26 value๊ฐ์ผ๋ก dictionarymap์ ์ ์ฅํ๋ฉด ๋๋ค.
์๋ฅผ๋ค์ด๋ณด๋ฉด
์ฌ์ ์ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ํ์ธํ๋ฉด ๋๋ค.
K (์ฌ์ ๋งต์ K๊ฐ ์๋์ง ํ์ธ)
A (์ฌ์ ๋งต์ A๊ฐ ์๋์ง ํ์ธ)
KA (์ฌ์ ๋งต์ KA๊ฐ ์๋์ง ํ์ธ)
O (์ฌ์ ๋งต์ O๊ฐ ์๋์ง ํ์ธ)
StringBuilder sb = new StringBuilder(msg);
msg ๊ฐ์ ์ถ๊ฐ, ์ญ์ ๊ฐ ์ฝ๊ฒ StringBuilder๋ฅผ ์ฌ์ฉ์ฃผ์ ๋ก์ง์ ์ดํด๋ณด๋ฉด
while(sb.length() > 0) {
int i ;
for(i = 1; i <= sb.length(); i++) {
if(!dictionary.containsKey(sb.substring(0, i))) {
break;
}
}
String found = sb.substring(0, i - 1);
result.add(dictionary.get(found));
if(i <= sb.length()) {
dictionary.put(found + sb.charAt(i - 1), index++);
}
sb.delete(0, i - 1);
}

dictionary Map์ ํ๊ธ์๋ก ๋ ๋ฌธ์ K๋ฅผ ๋จผ์ ์ฐพ๊ณ , ์ฌ์ ์ ์๋ ๋ฌธ์๊ฐ ๋์ค๋ฉด i์ ์์น๋ฅผ ๊ธฐ์ตํ๋ค. ๊ทธ ๊ฒฐ๊ณผ K๋ฅผ ๋ฆฌ์คํธ answer์ key K์ ๋ํ value ๊ฐ์ ๋ฃ๋๋ค.
if(i <= sb.length())์กฐ๊ฑด์ ๋ฒ์ ์ด๊ณผ ์๋ฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ฒ์ผ๋ก
์ด ์กฐ๊ฑด ์์ด sb.charAt(i - 1)์ ํธ์ถํ๋ฉด, ๋ง์ฝ i๊ฐ sb์ ๊ธธ์ด๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ ๋ฒ์์ด๊ณผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ์ฆ, KA, AK, KAO๋ฅผ ์ฌ์ ์ ์ถ๊ฐํ๋ค.

์ฆ, sb์ ๋ ๋ฌธ์์ K,A,KA,O๋ฅผ ์ ๊ฑฐ ํ๋ค.

๐ ๋ฌธ5) ํ๋ธ๊ฐ ํ๋ํ๋ ์ฝ๋ฉ ๋์๋ฆฌ์์๋ ์ ํต์ ์ผ๋ก ํด์ค๋ ๊ฒ์์ด ์๋ค. ์ด ๊ฒ์์ ์ฌ๋ฌ ์ฌ๋์ด ๋ฅ๊ธ๊ฒ ์์์ ์ซ์๋ฅผ ํ๋์ฉ ์ฐจ๋ก๋๋ก ๋งํ๋ ๊ฒ์์ธ๋ฐ, ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ ๊ฒ ๊ฒ์์ ์งํํ ๊ฒฝ์ฐ,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, โฆ
์์ผ๋ก ์ซ์๋ฅผ ๋งํ๋ฉด ๋๋ค.
ํํธ ์ฝ๋ฉ ๋์๋ฆฌ ์ผ์๋ค์ ์ปดํจํฐ๋ฅผ ๋ค๋ฃจ๋ ์ฌ๋๋ต๊ฒ ์ด์ง์๋ก ์ด ๊ฒ์์ ์งํํ๊ธฐ๋ ํ๋๋ฐ, ์ด ๊ฒฝ์ฐ์๋
0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, โฆ
์์ผ๋ก ์ซ์๋ฅผ ๋งํ๋ฉด ๋๋ค.
์ด์ง์๋ก ์งํํ๋ ๊ฒ์์ ์ต์ํด์ ธ ์ง๋ ค๊ฐ๋ ์ฌ๋๋ค์ ์ข ๋ ๋์ด๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ด์ง๋ฒ์์ ์ญ์ก์ง๋ฒ๊น์ง ๋ชจ๋ ์ง๋ฒ์ผ๋ก ๊ฒ์์ ์งํํด๋ณด๊ธฐ๋ก ํ๋ค. ์ซ์ ๊ฒ์์ด ์ต์ํ์ง ์์ ํ๋ธ๋ ๊ฒ์์ ์ ธ์ ๋ฒ์น์ ๋ฐ๋ ๊ตด์์ ํผํ๊ธฐ ์ํด, ์์ ์ด ๋งํด์ผ ํ๋ ์ซ์๋ฅผ ์ค๋งํธํฐ์ ๋ฏธ๋ฆฌ ์ถ๋ ฅํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ ค๊ณ ํ๋ค. ํ๋ธ์ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๋ผ.
์
๋ ฅ ํ์
์ง๋ฒ n, ๋ฏธ๋ฆฌ ๊ตฌํ ์ซ์์ ๊ฐฏ์ t, ๊ฒ์์ ์ฐธ๊ฐํ๋ ์ธ์ m, ํ๋ธ์ ์์ p ๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ ํ์
ํ๋ธ๊ฐ ๋งํด์ผ ํ๋ ์ซ์ t๊ฐ๋ฅผ ๊ณต๋ฐฑ ์์ด ์ฐจ๋ก๋๋ก ๋ํ๋ธ ๋ฌธ์์ด. ๋จ, 10~15๋ ๊ฐ๊ฐ ๋๋ฌธ์ A~F๋ก ์ถ๋ ฅํ๋ค.
์
์ถ๋ ฅ ์์
| n | t | m | p | result |
|---|---|---|---|---|
| 2 | 4 | 2 | 1 | "0111" |
| 16 | 16 | 2 | 1 | "02468ACE11111111" |
| 16 | 16 | 2 | 2 | "13579BDF01234567" |
๋์ ํ์ด
package programmers;
public class NBaseGame {
public static String solution(int n, int t, int m, int p) {
StringBuilder result = new StringBuilder();
String chars = "0123456789ABCDEF";
int number = 0;
while(result.length() < m * t){
int currentNumber = number++;
StringBuilder temp = new StringBuilder();
do {
temp.insert(0, chars.charAt(currentNumber % n));
currentNumber /= n;
}while(currentNumber > 0);
result.append(temp);
}
StringBuilder tubeResult = new StringBuilder();
for(int i = 0; i < t; i++) {
tubeResult.append(result.charAt(p - 1 + m * i));
}
System.out.println(tubeResult.toString());
return tubeResult.toString();
}
public static void main(String[] args) {
solution(16, 16, 2, 1);
}
}
๋ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ๋ก์ง
package programmers;
public class NBaseGame {
public static String solution(int n, int t, int m, int p) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i <= t*m; i++) {
sb.append(Integer.toString(i, n).toUpperCase());
}
StringBuilder result = new StringBuilder();
for(int i = p - 1 , j = 0; j < t; i +=m, j++) {
result.append(sb.charAt(i));
}
System.out.println(result.toString());
return sb.toString();
}
public static void main(String[] args) {
solution(16, 16, 2, 1);
}
}
๋์ ์๊ฐ
๋งค๊ฐ๋ณ์ n์ 2์์ 16๊น์ง์ ์(์ง๋ฒ)์ ๋ํ๋ด๋ฉฐ ํ ์ฌ๋์ด ๊ตฌํ๋ ์ซ์์ ๊ฐ์๊ฐ t, ์ฐธ๊ฐ์ธ์์ด m ์ด๊ธฐ๋๋ฌธ์,
StringBuilder sb = new StringBuilder();
for(int i = 0; i <= t*m; i++) {
sb.append(Integer.toString(i, n).toUpperCase());
}
๋ค์๊ณผ ๊ฐ์ด ์์ ๊ตฌํ ์ ์๋ค. ์ด๋, Integer.toString()๋ฅผ ์ฌ์ฉํ์ฌ, n์ ์ง๋ฒ์ ์๋ฅผ ๋ฃ์ผ๋ฉด ์ซ์๋ฅผ ์ง๋ฒ์ผ๋ก ๋ณํํ ์ ์๋ค.
์๋ฅผ๋ค์ด n = 16, t = 16, m = 2์ด๋ฉด 0 ~ 32 ๊น์ง์ ์๋ฅผ 16์ง์๋ก ๋ณํํ๋ค๋ ์๋ฏธ์ด๋ค.

์ฐธ๊ฐ์ธ์ m, ์์ p๋ฅผ ๊ฐ์ง๊ณ ์์ ์ ๋ฌธ์ ๋ ์ฐธ๊ฐ์ธ์ 2๋ช
์ค, ์ฒซ๋ฒ์งธ ์ฐจ๋ก์ด๊ธฐ๋๋ฌธ์, ์ฒซ์นธ๋ถํฐ ์์ํ์ฌ ํ์นธ์ ๊ฑด๋๋ฐ๊ณ ๋ค์ ์นธ์ ์ถ๊ฐํ๋ค. ๋จ 10์ด์์ ์๋ 1,0์ผ๋ก ๋๋์ด ์นธ์ ์ถ๊ฐํ๋ค. p๋ 1์ด์์ ์ ์ด๊ธฐ๋๋ฌธ์ i = 0 ๋ถํฐ +m(์ฐธ๊ฐ์ธ์์ ํฌ๊ธฐ) ๋งํผ ๋ํ์ฌ result์ ์ ์ฅํ๋ค.
int i = p - 1;
for(int j = 0; j < t; j++) {
result.append(sb.charAt(i));
i += m;
}

| for๋ฌธ ๊ตฌํ | while๋ฌธ ๊ตฌํ |
|---|---|
![]() ![]() | ![]() |