1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import java.util.*; public class phoneNumberList { public boolean solution(String[] phone_book) { // Arrays.sort(phone_book, new Comparator<String>() {//Comparator 구현 // @Override // public int compare(String o1, String o2) { // return Integer.compare(o1.length(),o2.length()); // } // }); // Arrays.sort(phone_book, (o1, o2) -> Integer.compare(o1.length(),o2.length()));//람다식 교체 Arrays.sort(phone_book, Comparator.comparingInt(String::length));//Comparator.comparingInt()로 교체 // 문자열 길이대로 정렬(짧은 순대로) if (checkIncludeString(phone_book)){ return false; } return true; } public boolean checkIncludeString(String[] phone_book) {//제일 짧은 문자열부터 시작해서 뒤의 문자열이 포함하고 있는지 체크 for (int i=0;i<phone_book.length;i++){ int len=phone_book[i].length(); for(int j=i+1;j<phone_book.length;j++){ if(phone_book[j].substring(0,len).equals(phone_book[i])){//체크 부분 return true; } } } return false; } } | cs |
phoneNumberList.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import org.junit.Test; import static org.junit.Assert.*; public class phoneNumberListTest { phoneNumberList p=new phoneNumberList(); String []s1={"119","97674223","1195524421"}; String []s2={"123","456","789"}; String []s3={"12","123","1235","567","88"}; @Test public void 테스트_결과() { assertEquals(false,p.solution(s1)); assertEquals(true,p.solution(s2)); assertEquals(false,p.solution(s3)); } } | cs |
phoneNumberListTest.java
- 문제 설명
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.
구조대 : 119
박준영 : 97 674 223
지영석 : 11 9552 4421
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
- 제한 사항
phone_book의 길이는 1 이상 1,000,000 이하입니다.
각 전화번호의 길이는 1 이상 20 이하입니다.
- 입출력 예제
phone_book return
[119, 97674223, 1195524421] false
[123,456,789] true
[12,123,1235,567,88] false
27번 라인에서 비교할때 처음에 ==를 써서 원하는 정답이 안나왔다. 생각해보다가 인텔리제이에서 보내는 경고표시를 보고 깨닫고 equal()로 바꿨다.
문제 주제가 해시인데 해시를 어떤식으로 적용해야할지 판단이 안섰다. 나중에 다시 한번 풀어봐야겠다.
1 2 3 4 5 6 | Arrays.sort(phone_book, new Comparator<String>() {//Comparator 구현 @Override public int compare(String o1, String o2) { return Integer.compare(o1.length(),o2.length()); } }); | cs |
문자열 길이별, 사전순 정렬하는 메소드이다.
인텔리제이에서 자동으로 람다식으로 변환해주었다.
↓
1 | Arrays.sort(phone_book, (o1, o2) -> Integer.compare(o1.length(),o2.length()));//람다식 교체 | cs |
↓
1 | Arrays.sort(phone_book, Comparator.comparingInt(String::length));//Comparator.comparingInt()로 교체 | cs |
확실히 인텔리제이가 편리한 기능들이 많이 있는 툴인 것을 다시 한번 깨닫게 되었다.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
다른 사람의 풀이를 봤는데 startsWith()라는 메소드가 있었다(...) 좀 더 찾아볼걸 그랬다.
1 | boolean startsWith(String prefix) | cs |
비교 대상 문자열이 입력된 문자열(prefix)값으로 시작되는지 여부를 확인하고 boolean 값으로 리턴한다.
반대로 끝이 어떻게 끝나는지 체크하는 메소드도 있었다.
1 | boolean endsWith(String suffix) |
문자열 관련 문제풀 때 활용 용도가 높을 것 같아서 기억하고 있어야겠다.
'프로그래머스 > JAVA' 카테고리의 다른 글
[level 2] 124 나라의 숫자 (0) | 2018.10.17 |
---|---|
[해시] 위장 (0) | 2018.10.12 |
[정렬] H-Index (0) | 2018.10.05 |
[해시] 완주하지 못한 선수 (2) | 2018.10.04 |
[level 2] JadenCase 만들기 (4) | 2018.09.30 |