https://school.programmers.co.kr/learn/courses/30/lessons/42577
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때,
어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성
ArrayList<String>[] phone = new ArrayList[10];
for (int i = 0; i < phone.length; i++) {
phone[i] = new ArrayList<>();
}
for (int i = 0; i < phone_book.length; i++) {
int numberOfOne = Integer.parseInt(phone_book[i].substring(0, 1));
phone[numberOfOne].add(phone_book[i]);
}
배열 ArrayList phone에 0~9에 phone_book의 첫 번째 숫자에 따라 구분되어 추가되도록 하였다.
이후 Collections.sort를 하여 숫자를 정리하고
for (int j = 0; j < phone[i].size() - 1; j++) {
if (phone[i].get(j+1).startsWith(phone[i].get(j))) {
return false;
}
}
startsWith을 이용하여 붙어있는 j+1가 j의 시작 부분인지를 체크하고 true라면 false를 리턴하도록 하였다.
import java.util.ArrayList;
import java.util.Collections;
class Solution {public boolean solution(String[] phone_book) {
ArrayList<String>[] phone = new ArrayList[10];
for (int i = 0; i < phone.length; i++) {
phone[i] = new ArrayList<>();
}
for (int i = 0; i < phone_book.length; i++) {
int numberOfOne = Integer.parseInt(phone_book[i].substring(0, 1));
phone[numberOfOne].add(phone_book[i]);
}
for (int i = 0; i < 10; i++) {
Collections.sort(phone[i]);
if (phone[i].isEmpty()) continue;
else {
for (int j = 0; j < phone[i].size() - 1; j++) {
if (phone[i].get(j+1).startsWith(phone[i].get(j))) {
return false;
}
}
}
}
return true;
}
}
근데 풀고 나서 보니까 이럴 필요가 있나 싶다.
그냥 sort만 하고 찾아도 나올 것 같긴 하다.
import java.util.Arrays;
class Solution {public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
for (int j = 0; j < phone_book.length - 1; j++) {
if (phone_book[j+1].startsWith(phone_book[j])) {
return false;
}
}
return true;
}
}
효율성에 차이가 있...나?
'Programmers' 카테고리의 다른 글
[프로그래머스][JAVA]Lv. 2 - 과제 진행하기 (0) | 2023.04.04 |
---|---|
[프로그래머스][JAVA]Lv. 2 - 가장 큰 수 (0) | 2023.03.29 |
[프로그래머스][JAVA]Lv. 2 - 캐시 (0) | 2023.03.27 |
[프로그래머스][JAVA]Lv. 2 - 프렌즈4블록 (0) | 2023.03.27 |
[프로그래머스][JAVA]Lv. 2 - 우박수열 정적분 (0) | 2023.03.23 |