728x90
반응형
📜 문제 내용
🤔 과정
- 숫자 기준 정렬을 하면 안되고, 문자열 비교이므로 문자열 배열 자체를 정렬하고 시작하면 편하겠다고 판단.
- 배열을 하나씩 접근하면서 다음 문자열 하나라도 만족하면 boolean 값을 바꿔준다.
- 문자열을 잘라서 비교해야 될 것이라고 생각해서 substring을 사용했는데, 나중에 이중 for 문과 합쳐져서인지 효율성 테스트에 통과되지 못했다.
✨ 최초 제출 답안
import java.util.*;
import java.io.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
// 문자열 기준으로 정렬
Arrays.sort(phone_book);
for(int i = 0; i < phone_book.length; i++){
String curr = phone_book[i];
int currLen = curr.length();
for(int j = i + 1; j < phone_book.length; j++){
// 현재 문자열이 다음의 문자열보다 길면 for문 벗어나기
if(currLen > phone_book[j].length()) break;
// 다음 문자열 잘라서 비교
String target = phone_book[j].substring(0,currLen);
if(target.equals(curr)){
answer = false;
}
}
}
return answer;
}
}
- 너무 급하게 한 탓일까, 이중 for 문을 돌리면 모든 테스트 케이스는 통과되지만, 효율성 테스트를 반절만 통과할 수 있었다. 그래서 prefix가 일치하는지 확인할 수 있는 startsWith를 활용하기로 했다.
✍️ 재제출 답안
import java.util.*;
import java.io.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
// 문자열 기준으로 정렬
Arrays.sort(phone_book);
for(int i = 0; i < phone_book.length - 1; i++){
String curr = phone_book[i];
String next = phone_book[i + 1];
// 뒷 문자열이 앞 문자열로 시작한다면
if(next.startsWith(curr)){
answer = false;
}
}
return answer;
}
}
- 문제 카테고리가 해시라서 HashMap을 연습하라고 한 의도 같은데, HashMap 또한 학습하고 재접근해야겠다.
🔗 문제 링크
728x90
반응형