문제 설명
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.
- 구조대 : 119
- 박준영 : 97 674 223
- 지영석 : 11 9552 4421
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
제한사항
phone_book의 길이는 1 이상 1,000,000 이하입니다.
각 전화번호의 길이는 1 이상 20 이하입니다.
같은 전화번호가 중복해서 들어있지 않습니다.
문제 이해하기
- 전화번호부에 적힌 전화번호들 : phone_book 배열에 담겨져서 들어올 것임
- 어떤 번호가 다른 번호의 접두어인지만 파악해서 T, F return 하면 됨
문제 설계하기
절망편 : 루프 계속 돌리면..되긴할거같은데..시간도 엄청 오래걸리고....효율적이지 않을 거 같음....
희망편 : 배열 속에 있는 전화번호를 오름차순으로 sorting > 루프를 한번만 돌려서 [0]번째, [1] 번째 두 개 숫자 앞부분 확인 > 숫자 앞부분이 뒷 숫자의 접두어인지 확인하고 T , F 확인!! (접두어가 맞으면 false, 접두어가 아니면 true 리턴하라고 함)
배열 phone_book의 배열의 길이는 1 이상 1,000,000 이하라고 했으니 루프도 당연히 백만개 - 1 만큼 돌리면 될 거라고 생각했다.
//1. phone_book 배열을 정렬한다 (오름차순으로)
정답 제출
import java.util.Arrays;
class Solution {
public boolean solution(String[] phone_book) {
//1. phone_book을 오름차순으로 정렬
Arrays.sort(phone_book);
//2. 1중 loof를 돌면서 앞번호가 뒷번호의 접두어인지를 확인하기
for(int i = 0; i<phone_book.length - 1; i++) {
//length는 1부터 카운트해서 배열의 인덱스값과 맞지가 않음.. 그래서 -1을 해서 0부터 시작하게끔 설정값 조정
//phone_book[i+1] : 뒷번호
if((phone_book[i+1]).startsWith(phone_book[i]))
return false;
}
//3. 여기까지 오지 못했으면 접두어가 없다는 것 췍췍
return true;
}
}
디테일 설명
전체 코딩 중 주목해서 볼 부분이 이 부분이라고 생각한다
if((phone_book[i+1]).startsWith(phone_book[i]))
return false;
풀이
phone_book[i+1] : 뒷번호
.startsWith(매개변수) 메서드 : 특정 접두사가 있는지 검사할 때 자주 쓰임
String Name = "바밤바";
if (Name.startsWith("바밤바룰라뿌빠뿌")) {
System.out.println("변수이름이 '바밤바'로 시작합니다.");
}
Name 변수 : 검사의 기준이 되는 필터 단어 ex. ctrl+f에 적는 단어
Name.startsWith(검사를 할 단어나 변수)
이렇게 생각을 하면 된다!
그래서
if((phone_book[i+1]).startsWith(phone_book[i]))
return false;
//phone_book 배열에 있어서 i번째 배열의 숫자가 i+1번째 배열의 숫자와 같다면(앞배열 숫자가 뒷배열 숫자의 접두어라면)
false를 반환해라
'코딩테스트 > 자바 코테' 카테고리의 다른 글
[프로그래머스] 정렬 - H Index (1) | 2024.03.30 |
---|---|
[프로그래머스] Hash - 폰켓몬 (1) | 2024.03.23 |
[프로그래머스] 알고리즘 - 구명보트 (1) | 2024.03.16 |
[프로그래머스] 올바른 괄호 코딩테스트 (0) | 2024.01.26 |
[프로그래머스] 혼자 놀기의 달인 코딩테스트 (0) | 2024.01.20 |