1. ๋ฌธ์ ์ค๋ช
์ ํ๋ฒํธ๋ถ์ ์ ํ ์ ํ๋ฒํธ ์ค, ํ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋ฒํธ์ ์ ๋์ด์ธ ๊ฒฝ์ฐ๊ฐ ์๋์ง ํ์ธํ๋ ค ํฉ๋๋ค.
์ ํ๋ฒํธ๊ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ, ๊ตฌ์กฐ๋ ์ ํ๋ฒํธ๋ ์์์ด์ ์ ํ๋ฒํธ์ ์ ๋์ฌ์
๋๋ค.
- ๊ตฌ์กฐ๋ : 119
- ๋ฐ์ค์ : 97 674 223
- ์ง์์ : 11 9552 4421
์ ํ๋ฒํธ๋ถ์ ์ ํ ์ ํ๋ฒํธ๋ฅผ ๋ด์ ๋ฐฐ์ด phone_book ์ด solution ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ด๋ค ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋ฒํธ์ ์ ๋์ด์ธ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฉด false๋ฅผ ๊ทธ๋ ์ง ์์ผ๋ฉด true๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- 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 ์์์ ์ค๋ช ํ ์์ ๊ฐ์ต๋๋ค.
- ์ ์ถ๋ ฅ ์ #2 ํ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋ฒํธ์ ์ ๋์ฌ์ธ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋ก, ๋ต์ true์ ๋๋ค.
- ์ ์ถ๋ ฅ ์ #3 ์ฒซ ๋ฒ์งธ ์ ํ๋ฒํธ, “12”๊ฐ ๋ ๋ฒ์งธ ์ ํ๋ฒํธ “123”์ ์ ๋์ฌ์ ๋๋ค. ๋ฐ๋ผ์ ๋ต์ false์ ๋๋ค.
2. ์ ๊ทผ๋ฐฉ์
2-1. ๋ฌธ์ ๋จ์ํ
- ์ ํ๋ฒํธ๊ฐ ๋ค์ด์๋ ๋ฐฐ์ด์์ ํ ๋ฒํธ๊ฐ ์ด๋ค ๋ฒํธ์ ์ ๋์ด์ธ์ง ์ฐพ๋ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
- ๋ฐฐ์ด ๋ด์์ ์๋ฌด ๋ฒํธ๊ฐ ๊ฐ์ ๋ฐฐ์ด์ ๋ค์ด ์๋ ๋ค๋ฅธ ๋ฒํธ๋ก ์์ํ๋ฉด false ๋ฆฌํด
- ์๋ก ๊ด๋ จ ์๋ ๋ฒํธ๊ฐ ์์ผ๋ฉด true ๋ฆฌํด
- ์ด ๋ ์ ์ถ๋ ฅ ์ #1์ ๋ณด๋ฉด ์ ๋์ด์ธ ๋ฒํธ๋ ๋ฐ๋ก ์ ์ธ๋ฑ์ค์ ๋ถ์ด ์์ ํ์๊ฐ ์์. => ์ ๋ ฌ์ ํด ์ค์ผ ํจ
2-2. ํด๊ฒฐ๋ฒ
โ ์ด ๋ฌธ์ ๊ฐ ํด์ ๋ฌธ์ ์ธ ๊ฑธ ๋ชฐ๋๋ค๋ฉด, ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ํ์ด๋ ๋๋ค. ๊ฐ์ฅ ๋จผ์ ์ฝ๊ฒ ๋ ์ค๋ฅด๋ ๋ฐฉ๋ฒ์ ์ ๋ ฌ ํ Loop ๋ฅผ ๋๋ ค์ i+1๋ฒ์งธ ์ธ๋ฑ์ค์ ๊ฐ์ด i๋ฒ์งธ ์ธ๋ฑ์ค์ ๊ฐ์ผ๋ก ์์ํ๋ ์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ด๋ค.
โ ๋ช ์์ด ํด์ ๋ฌธ์ ์ด๋, ํด์๋งต(HashMap) ํตํด์ ํ์ธํ๋ ๋ฐฉ๋ฒ
3. ๋ฌธ์ ํ์ด
3-1. Loop
- String1.startsWith(String2) ๋ฉ์๋ : String1์ด String2๋ก ์์ํ๋ฉด true, ๊ทธ๋ ์ง ์์ผ๋ฉด false ๋ฐํํ๋ ๋ฉ์๋
import java.util.Arrays;
class Solution {
public boolean solution(String[] phone_book) {
// 1. ๋ฐฐ์ด ์ ๋ ฌํ๊ธฐ - ์ด ์์
์ ํตํด ๋น์ทํ ๊ฐ์ด ๊ทผ์ฒ์ ์ ๋ ฌ๋จ.
Arrays.sort(phone_book);
// 2. for๋ฌธ(Loop)์ ๋๋ฉด์ ๋ท ๋ฒํธ๊ฐ ์ ๋ฒํธ๋ก ์์ํ๋์ง ํ์ธ
for(int i = 0; i < phone_book.length-1; i++) {
if (phone_book[i+1].startsWith(phone_book[i])) {
return false;
}
}
return true;
}
}
3-2. HashMap
ํ๋ฆฐ ์ฝ๋
import java.util.HashMap;
class Solution {
public boolean solution(String[] phone_book) {
// 1. ํด์๋งต ์ ์ธ
HashMap<String, Integer> map = new HashMap<>();
// 2.๋ชจ๋ ์ ํ๋ฒํธ๋ฅผ ํด์๋งต์ ์ถ๊ฐ
for (String phone : phone_book) {
map.put(phone_book[i], 1); // ํ๋ฆฐ ์ฝ๋ 1
}
// 3. ๊ฐ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋ฒํธ์ ์ ๋์ฌ์ธ์ง ํ์ธ
for (String phone : phone_book ) {
for (int i = 1, i < phone_book.length; i++) { // ํ๋ฆฐ ์ฝ๋ 2
if(map.containsKey(phone.substring(0, i))) {
return false;
}
}
}
return true;
}
}
ํ๋ฆฐ ์ฝ๋ 1 : for-each ๋ฌธ์์๋ phone_book[i]๊ฐ ์๋๋ผ phone์ผ๋ก ์จ์ผ ํจ
ํ๋ฆฐ ์ฝ๋ 2: phone_book.length๊ฐ ์๋๋ผ i < phone.length()
์ ๋ต ์ฝ๋
import java.util.HashMap;
class Solution {
public boolean solution(String[] phone_book) {
// 1. ํด์๋งต ์ ์ธ
HashMap<String, Integer> map = new HashMap<>();
// 2. ๋ชจ๋ ์ ํ๋ฒํธ๋ฅผ ํด์๋งต์ ์ถ๊ฐ
for (String phone : phone_book) {
map.put(phone, 1);
}
// 3. ๊ฐ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋ฒํธ์ ์ ๋์ฌ์ธ์ง ํ์ธ
for (String phone : phone_book) {
for (int i = 1; i < phone.length(); i++) {
if (map.containsKey(phone.substring(0, i))) {
return false;
}
}
}
return true;
}
}
โ map.containsKey()
์๋ฐ Map ์ธํฐํ์ด์ค์ ์ ์๋ ๋ฉ์๋, ํด์๋งต์ด ํน์ ํค๋ฅผ ํฌํจํ๊ณ ์๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ฃผ์ด์ง ํค๊ฐ ๋งต์ ์กด์ฌํ๋ ๊ฒฝ์ฐ true, ์กด์ฌํ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํด ์ค๋ค. (ํค๊ฐ ์กด์ฌํ๋์ง๋ง ํ์ธํ๋ ๋ฉ์๋๊ณ ํค๊ฐ์ ๋ฐํํ์ง๋ ์์.)
Map<String, Integer> map = new HashMap<>();
map.put("apple", 3);
map.put("banana", 5);
if (map.containsKey("apple")) {
System.out.println("๋ฐฐ์ด ์์ apple ์์ด์~");
} else {
System.out.println("๋ฐฐ์ด ์์ apple ์์ด์~");
}
โ phone.substring(0, i)
substring(0, i)๋ ์ ํ๋ฒํธ์ ์ฒซ ๊ธ์๋ถํฐ i๋ฒ์งธ ๊ธ์ ์ด์ ๊น์ง์ ๋ชจ๋ ๋ฌธ์๋ฅผ ํฌํจํ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
์ ํ๋ฒํธ๊ฐ "12345"๋ผ๊ณ ๊ฐ์ ํด ๋ณด์, substring(0, i)๋ฅผ ์ํํ๋ฉด
- i = 1: phone.substring(0, 1) → "1"
- i = 2: phone.substring(0, 2) → "12"
- i = 3: phone.substring(0, 3) → "123"
- i = 4: phone.substring(0, 4) → "1234"
String phone = "12345";
for (int i = 1; i < phone.length(); i++) {
String prefix = phone.substring(0, i);
System.out.println("i = " + i + ", prefix = " + prefix);
}
[๊ฒฐ๊ณผ ์ถ๋ ฅํ๋ฉด]
i = 1, prefix = 1
i = 2, prefix = 12
i = 3, prefix = 123
i = 4, prefix = 1234
์ด๋ ๊ฒ ๊ฐ i์ ๋ํด phone์ ์ ๋์ฌ ํ์ธ ๊ฐ๋ฅ
4. ๋์ผ์ ํ ๋ฌธ์ (ํด์)
์์ฃผํ์ง ๋ชปํ ์ ์
ํฐ์ผ๋ชฌ