풀이 : 이문제를 읽자마자 찾아본건 접두어이다...
" 접두사는 어떤 단어의 앞에 붙어 뜻을 첨가하여 하나의 다른 단어를 이루는 말 " 이라고 해서 Contains 는 제외
1. hash 문제이니 만큼 hashmap 을 사용한다 인자는 String, List<String>
2. HashMap 을 채울때 Key 값을 넣고 List 는 Key 값을 제외한 값으로 List 로 변환하여 넣는다.
3. Key 별로 List 를 Foreach로 돌려 접두어 인지 체크하여 하나라도 false 시 Break 진행
접두어 확인 방법 : IndexOf, StartWith 등등...
하지만 효율성이 0점...
package com.company;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Logger;
public class PhoneNumberBookList {
static String[] phone_book = {"12","123","1235","567","88"};
private final static Logger LOG = Logger.getGlobal();
public static void main(String[] args) {
System.out.println(solution(phone_book));
}
public static boolean solution(String[] phone_book) {
boolean answer = true;
HashMap<String, List<String>> _hashmap = new HashMap<>();
ArrayList<String> _list;
for (int i = 0; i < phone_book.length; i++)
{
_list = new ArrayList<>(Arrays.asList(phone_book));
_list.remove(i);
_hashmap.put(phone_book[i], _list);
}
for (String _key: _hashmap.keySet())
{
for (String value :_hashmap.get(_key))
{
if (_key.length() > value.length()) continue;
if (value.indexOf(_key) == 0)
{
answer = false;
break;
}
}
if(answer == false) break;
}
return answer;
}
}
Key 값을 제외한 List 를 만들어서 무리하게 진행 하니 데이터가 커질수록 시간이 배로 든다... n + n^2 쯤...
그래서 친구에게 물어보니 List 를 String 으로 하고 뒷부분 접두어 확인 부분의 조건을 바꾸어 통과 하게되었다..
이래서는.. Key 값을 제외한 배열을 안쓰게 되어서 굳이 할필요가 없지만 List 변환은 시간이 걸린다는걸 알게되었다.
package com.company;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Logger;
public class PhoneNumberBookList {
static String[] phone_book = {"12","123","1235","567","88"};
private final static Logger LOG = Logger.getGlobal();
public static void main(String[] args) {
System.out.println(solution(phone_book));
}
public static boolean solution(String[] phone_book) {
boolean answer = true;
HashMap<String, String[]> _hashmap = new HashMap<>();
for (int i = 0; i < phone_book.length; i++)
_hashmap.put(phone_book[i], phone_book);
for (String _key: _hashmap.keySet())
{
for (String value :_hashmap.get(_key))
{
if (_key.length() >= value.length() ) {
continue;
}
else
{
if (value.indexOf(_key) == 0)
return false;
}
}
if(answer == false) break;
}
return answer;
}
}
이거말고 어떻게 해쉬를 사용하여 푸는지 알아보고 싶어 찾게 된것이 Trie 자료구조라는것이 있었다.
해당 내용 공부를 해야할것 같다...
'알고리즘 > JAVA' 카테고리의 다른 글
[JAVA] 두 정수 사이의 합 - 프로그래머스 (0) | 2021.02.25 |
---|---|
[JAVA] 위장 - 프로그래머스 (0) | 2020.11.17 |
[JAVA] 완주하지 못한 선수 - 프로그래머스 (0) | 2020.11.13 |
[JAVA] 프린터 - 프로그래머스 (0) | 2020.10.24 |
[JAVA] 스킬트리 - 프로그래머 (0) | 2020.10.23 |