๐ง ํ๋ก๊ทธ๋๋จธ์ค LV2. ์ ํ๋ฒํธ ๋ชฉ๋ก
๋ฌธ์ ์ค๋ช
์ ํ๋ฒํธ๋ถ์ ์ ํ ์ ํ๋ฒํธ ์ค, ํ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋ฒํธ์ ์ ๋์ด์ธ ๊ฒฝ์ฐ๊ฐ ์๋์ง ํ์ธํ๋ ค ํฉ๋๋ค.์ ํ๋ฒํธ๊ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ, ๊ตฌ์กฐ๋ ์ ํ๋ฒํธ๋ ์์์ด์ ์ ํ๋ฒํธ์ ์ ๋์ฌ์ ๋๋ค.
- ๊ตฌ์กฐ๋ : 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 |
์ถ์ฒ
https://school.programmers.co.kr/learn/courses/30/lessons/42577?language=java
๐ก ๋ฌธ์ ํ์ด
ํ๋ก๊ทธ๋๋จธ์ค์์๋ ํด์ ์ ํ์ผ๋ก ๋ถ๋ฆฌํด๋์์ง๋ง, ๋จ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก๋ ํ์ดํ ์ ์์๋ค. ๊ทธ๋์ ๋ ์ ํ ๋ชจ๋ ํ์ดํด๋ณด๋ ค๊ณ ํ๋ค :)
๋จ์ ๋ฐ๋ณต๋ฌธ
๊ฐ์ธ์ ์ผ๋ก ๋ ์ฌ๋ฆฌ๊ธฐ์๋ ๊น๋ค๋ก์ธ ์ ์์ง๋ง, ๋ฐฉ๋ฒ์ ์๊ณ ๋๋ฉด ๊ต์ฅํ ์ฝ๊ฒ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
๋จผ์ phone_book ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํด์ค๋ค.
์ฒซ๋ฒ์งธ ์ผ์ด์ค๋ฅผ ์์๋ก ๋ค๋ฉด, [119, 1195524421, 97674223] ๊ฒฐ๊ณผ๋ก ๋์จ๋ค. ๋ฌธ์ ์ ํต์ฌ์ "ํ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋ฒํธ์ ์ ๋์ฌ์ธ ๊ฒฝ์ฐ"๋ฅผ ํ๋จํ๋ ๊ฒ์ด๊ณ , ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ฉด i๋ฒ์งธ ๋ฌธ์์ด์ด i+1๋ฒ์งธ ๋ฌธ์์ด์ ์ ๋์ฌ์ธ์ง๋ง ์ฒดํฌํ๋ฉด ๋๋ค. ์ฆ, ์ ๋ ฌ ์์ด๋ ์ด์ค ๋ฐ๋ณต๋ฌธ์ผ๋ก ํ์ธํ ์ ์๋ ๊ฒ์ด ์ ๋ ฌ์ ํ๊ณ ๋๋ฉด ํ๋์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ฒฐ๊ณผ ํ์ ์ด ๊ฐ๋ฅํด์ง๋ ๊ฒ์ด๋ค.
์ด์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ i๋ฒ์งธ ๋ฌธ์์ด์ด i+1๋ฒ์งธ ๋ฌธ์์ด์ ์ ๋์ด์ธ์ง ํ์ธํด์ฃผ๋ฉด ๋๋ค.
์ ๋์ฌ์ธ ๊ฒฝ์ฐ๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ฐ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฉด ๋ง์ง๋ง์ true๋ฅผ ๋ฐํํด์ฃผ๋ฉด ๋๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด๋ค.
for(int i = 0; i < phone_book.length - 1; i++) {
if (phone_book[i+1].startsWith(phone_book[i])
return false;
}
String.startsWith(String) ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋์ ๋ฌธ์์ด์ด ์ธ์๋ก ๋ค์ด๊ฐ ๋ฌธ์์ด ๊ฐ์ผ๋ก ์์ํ๋ ์ง๋ฅผ ํธ๋ฆฌํ๊ฒ ํ๋จํ ์ ์๋ค!
์ ํ์ด ๋ฐฉ๋ฒ์ ์ ์ฒด ์ฝ๋๋ก ํ์ด๋ด๋ฉด ์๋์ ๊ฐ๋ค.
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
for (int i = 0; i < phone_book.length - 1; i++) {
if (phone_book[i + 1].startsWith(phone_book[i])) return false;
}
return true;
}
}
Hash(ํด์)
phone_book ๋ฐฐ์ด์ ๋ชจ๋ ๊ฐ์ HashMap์ ์ถ๊ฐํ๊ณ , ๊ฐ ๋ฌธ์์ด์ ๋๋ฉด์ ๋ฌธ์์ด์ ์ ๋์ฌ๊ฐ ๋ ์ ์๋ ๋ฌธ์์ด์ด HashMap์ ํฌํจ๋์ด์๋์ง๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋จผ์ ๋ฐฐ์ด์ ๋ชจ๋ ๊ฐ์ HashMap์ ๋ด์์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด์ ๋๋ฉด์ ๊ฐ ๋ฌธ์์ด์ ์ ๋์ฌ๊ฐ HashMap์ ํฌํจ๋์ด ์๋์ง ํ์ธํด์ค๋ค. ํฌํจ๋์ด์์ผ๋ฉด false๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ฐ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฉด ๋ง์ง๋ง์ true๋ฅผ ๋ฐํํด์ฃผ๋ฉด ๋๋ค.
์ ํ์ด ๋ฐฉ๋ฒ์ ์ ์ฒด ์ฝ๋๋ก ์์ฑํ๋ฉด ์๋์ ๊ฐ๋ค.
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < phone_book.length; i++) {
map.put(phone_book[i], i);
}
for (int i = 0; i < phone_book.length; i++) {
for (int j = 0; j < phone_book[i].length(); j++) {
if (map.containsKey(phone_book[i].substring(0, j))) return false;
}
}
return true;
}
}
โจ ํฌ์คํ ์ ๋ง์น๋ฉฐ
๋ ๋ค ์ด์ค ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋๋ฆฌ๊ณ ๊ณ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ ์ ๊ฒฐ๊ตญ ํ์ด ๋ฐฉ๋ฒ์ ์ฐพ์๋ดค๋ค. ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ ํ๋์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ํ์ธํ๋ ๋ฐฉ๋ฒ๋, Hash์ containsKey๋ก ํ์ธํ๋ ๋ฐฉ๋ฒ๋ ์ ๋ฐํ๊ฒ ๋๊ปด์ก๋ค. ์ญ์ ๋ฌธ์ ๋ฅผ ์ผ๋จ ๋ง์ด ํ์ด๋ณด๋ ๊ฒ์ด ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ ํจ๊ณผ์ ์ง๋นต์ธ ๋ฏ ํ๋ค!
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค LV2] ๊ธฐ๋ฅ๊ฐ๋ฐ (Queue, ํ) (0) | 2023.10.17 |
---|---|
[๋ฐฑ์ค 1162] ๋๋กํฌ์ฅ (Dijkstra, ๋ค์ต์คํธ๋ผ) (2) | 2023.10.16 |
[๋ฐฑ์ค 1446] ์ง๋ฆ๊ธธ (Dijkstra, ๋ค์ต์คํธ๋ผ) (0) | 2023.10.15 |
[ํ๋ก๊ทธ๋๋จธ์ค LV3] ๋ฒ ์คํธ ์จ๋ฒ (Hash, ํด์) (2) | 2023.10.14 |
[๋ฐฑ์ค 1629] ๊ณฑ์ (๋ถํ ์ ๋ณต, Divide and Conquer) (0) | 2022.11.26 |