반응형
1. 문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/42577
2. 설계 & 코드
설계1) 실패
1. phone_book 배열을 하나씩 돌면서 size를 저장한다.
2. phone_book 2중 for을 하나씩 돌면서 1중 배열 인덱스와 같지 않은 녀석을 타겟으로 한다.
3. 타겟은 1중 배열 0~size만큼 substring을 뽑아낸다.
4. substring으로 뽑아낸 녀석과 size를 뽑아냈던 string이 같은지 비교한다. (접두사가 맞는지 확인)
5. 맞으면 return false, 아니면 계속 돈다.
import java.util.HashSet;
class Solution {
//1. phone_book의 인덱스 순으로 해시셋에 저장 & 길이 저장
//2. 해당 문자보다 긴 phone_book 대상으로 접두사 있는지 체크
//3. 없으면 clear 처리하고, 1번 다시 진행
public boolean solution(String[] phone_book) {
boolean answer = true;
//1
for(int i=0;i<phone_book.length;i++){
int st_size = phone_book[i].length();
for(int j=0;j<phone_book.length;j++){
if(i==j) continue;
if(st_size<=phone_book[j].length()){
//st_size만큼 phone_book[j] 비교
String target = phone_book[j].substring(0,st_size);
if(target.equals(phone_book[i])){
return false;
}
}
}
}
return answer;
}
}
결과 : 효율성에서 탈락...
설계2) 성공
1. phone_book 배열을 sort한다. sort하면 내 뒤에는 나와 앞 부분이 가장 비슷한 숫자 String이 온다.
2. phone_book 배열을 하나씩 돌면서 내 뒤 인덱스와 비교해 접두사를 갖는지 본다.
ㄴ접두사 비교할 때 substring을 써봤는데, 런타임에러로 테스트를 못 통과하는 예가 있었다.
ㄴstartsWith이라는 녀석을 써주면 그 문자열로 시작하는지 확인해준다.
import java.util.Arrays;
class Solution {
//1. phone_book을 sort한다.
//2. 뒤 인덱스만 보면 된다. (나랑 가장 가까운 숫자가 내 뒤에 있는 거니까)
public boolean solution(String[] phone_book) {
boolean answer = true;
Arrays.sort(phone_book);
//1
for(int i=0;i<phone_book.length-1;i++){
if(phone_book[i+1].startsWith(phone_book[i])){
return false;
}
}
return answer;
}
}
사용법
public class StartsWithTest{
public static void main(String[] args){
String startsWithT = "자바 코딩 테스트 ";
System.out.println( startsWithT.startsWith("자바") ); // true
System.out.println( startsWithT.startsWith("자바 ") );// true
System.out.println( startsWithT.startsWith("자") );// true
System.out.println( startsWithT.startsWith(" 자") );// false
}
}
endsWith은 보너스 지식!
public class EndsWithTest{
public static void main(String[] args){
String endsWithT = "자바 코딩 테스트 ";
System.out.println( endsWithT.endsWith("테스트") ); // false
System.out.println( endsWithT.endsWith("테스트 ") );// true
System.out.println( endsWithT.endsWith("트 ") );// true
System.out.println( endsWithT.endsWith(" 테") );// false
}
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] lv3. 가장 먼 노드 [#그래프] (0) | 2023.10.23 |
---|---|
[프로그래머스] lv3. 단어변환 [#BFS/DFS] (0) | 2023.10.23 |
[프로그래머스] lv1. 완주하지 못한 선수 [#해시] + HashMap 순회법 (0) | 2023.10.18 |
[프로그래머스] lv1. 포켓몬 [#해시] (1) | 2023.10.18 |
[프로그래머스] lv3. 네트워크 [#Union-Find] (0) | 2023.10.12 |