π λ¬Έ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
κ°μΌλ‘ dictionary
mapμ μ μ₯νλ©΄ λλ€.
μλ₯Όλ€μ΄λ³΄λ©΄
μ¬μ μ λ€μκ³Ό κ°μ μμλ‘ νμΈνλ©΄ λλ€.
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λ¬Έ ꡬν |
---|---|
![]() ![]() | ![]() |