π νλ‘κ·Έλλ¨Έμ€ / ν΄μ / Level2 / μ νλ²νΈ λͺ©λ‘
π λ¬Έμ
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
π« μ ν μ¬ν
- phone_bookμ κΈΈμ΄λ 1 μ΄μ 1,000,000 μ΄νμ
λλ€.
- κ° μ νλ²νΈμ κΈΈμ΄λ 1 μ΄μ 20 μ΄νμ λλ€.
- κ°μ μ νλ²νΈκ° μ€λ³΅ν΄μ λ€μ΄μμ§ μμ΅λλ€.
π μ μΆλ ₯ μ
| phone_book | return |
| ["119", "97674223", "1195524421"] | false |
| ["123","456","789"] | true |
| ["12","123","1235","567","88"] | false |
π€ νμ΄ λ°©λ²
1οΈβ£ λ¨μ λ°°μ΄ μ 체 νμμ ν΅ν νμ΄
β ꡬν κ³Όμ
β‘οΈ λ¨μ λ°°μ΄ νμμ ν΅ν΄μ νλμ© λΉκ΅νλ λ°©μμΌλ‘ μ½λλ₯Ό μ§λ³΄μλ€. μκ°ν΄λ³Όμ μ λκ°μ§ μλ€.
1. λ¬Έμμ΄μ λΉκ΅νλ λ²
β‘οΈ String λ΄λΆ ν¨μ μ€ substring() ν¨μλ₯Ό νμ©νκΈ°λ‘ νλ€.
// μμ
String abc = "abc"
String a = abc.substring(0,1);
String bc = abc.substring(1);
2. λ°°μ΄μ λ¬Έμμ΄μ κΈΈμ΄λ₯Ό κΈ°μ€μΌλ‘ μ λ ¬νλ λ²
β‘οΈ 1 μμ μ ν substring() μ μ΄μ©νλ €λ©΄ λ°°μ΄μ λ¬Έμμ΄μ κΈΈμ΄λ₯Ό κΈ°μ€μΌλ‘ μ λ ¬ν νμκ° μμλ€. λ¨μ Arrays.sort() λ₯Ό νμ©νλ©΄ (1) λ¬Έμμ΄μ 맨 μμ리 (2) λ¬Έμμ΄μ κΈΈμ΄ μμΌλ‘ λΆλ₯λμ΄ index μ€λ₯κ° λ°μνλ―λ‘ μνλ ννκ° μλμλ€.
μμ) [12, 124, 89, 3456, 72]
[12, 124, 3456, 72, 89] // λ¨μ Arrays.sort() νμ©μ
[12, 89, 72, 124, 3456] // λ΄κ° μνλ νν (λ¬Έμμ΄μ΄ κΈΈμ΄μ)
λ νΌλ°μ€λ₯Ό μ°Ύμ보λ Arrays.sort() ν¨μμ λ΄μ©μ€ 첫λ²μ§Έ μΈμλ‘ λ°°μ΄, λλ²μ§Έ μΈμλ‘ Comparator λ₯Ό λ겨주λ λ°©λ²μ΄ μμλ€. Comparator μ¬μ© λ°©λ²μ μ λͺ°λΌμ κ²μν΄λ³΄λ μλμ κ°μ΄ Overriding μ ν΅ν΄μ ꡬν κ°λ₯νλ€.
Arrays.sort(phone_book, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
①ꡬν μ½λ
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
// μ λ ¬ (λ¬Έμμ΄ κΈΈμ΄ μ)
Arrays.sort(phone_book, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
// νμ
for (int i=0; i<phone_book.length; i++) {
String pre = phone_book[i];
int preSize = pre.length();
for (int j=i+1; j<phone_book.length; j++) {
String comp = phone_book[j];
if (pre.equals(comp.substring(0, preSize))) {
return false;
}
}
}
return answer;
}
}
β’ κ²°κ³Ό

β‘οΈ μΌλ° μ½λλ€μ λͺ¨λ ν΅κ³Όνμ§λ§ ν¨μ¨μ± ν μ€νΈμμ 2κ°λ₯Ό ν΅κ³Όνμ§ λͺ»νλ€.
β‘οΈ μ«μλΉκ΅λ₯Ό μν΄ νλ³νμ μλν΄λ³΄μμ§λ§, λ°λλ‘ νλ³ν ν νμ΄ μ λ μ€λκ±Έλ Έλ€.
2οΈβ£ Hash Set μ¬μ©
β‘οΈ Hash μ κ°λ μ λν΄ μ’ λ μ 리ν΄λ³΄κ³ λλ κ²μκ³Όμ μμ Hash κ΄λ ¨ μλ£κ΅¬μ‘°λ₯Ό μ¬μ©νλ κ²μ΄ μΌλ§λ ν¨μ¨μ μΈμ§ μ μ μμλ€.
β νμ΄ μ½λ
import java.util.Set;
import java.util.HashSet;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
// Set μμ± λ° μμ μΆκ°
Set<String> set = new HashSet<>();
for (String str : phone_book) {
set.add(str);
}
// // νμ (1) β‘οΈ μκ°μ΄κ³Ό
// for (int i=0; i<phone_book.length; i++) {
// String prefix = phone_book[i];
// for (String str : set) {
// if (str.equals(prefix)) {
// continue;
// }
// if (str.startsWith(prefix)) {
// return false;
// }
// }
// }
// νμ (2)
for (String str : set) {
for (int i=1; i<str.length(); i++) {
if (set.contains(str.substring(0,i))) {
return false;
}
}
}
return answer;
}
}
β‘οΈ νμ (1) μ λ°©μμ λ¬Έμμ΄μ λΉκ΅νλ equals() λ©μλ λλ¬Έμ ν¨μ¨μ±μ΄ λ¨μ΄μ‘λ€.
β‘οΈ νμ (2) μ λ°©μμ λΉ λ₯΄κ² νμμ΄ κ°λ₯νλ€.
β‘ κ²°κ³Ό

β‘οΈ μ΄μ μ μ€ν¨νλ ν μ€νΈ 3&4 λ μ ν΅κ³Όνμλ€.
π» νμ΄ μ½λ
[level 2] Title: μ νλ²νΈ λͺ©λ‘, Time: 367.90 ms, Memory: 189 MB -BaekjoonHub · Young998904/Practice_Algorithm_Auto@defe7e
Show file tree Showing 2 changed files with 167 additions and 0 deletions.
github.com
π μ°Έκ³
β Java Array Sorting λ°°μ΄ μ λ ¬ (https://velog.io/@alicesykim95/Java-Array-Sorting-%EB%B0%B0%EC%97%B4-%EC%A0%95%EB%A0%AC)