기록을 합시다.
[프로그래머스] 전화번호 목록(python/java) 본문
문제 요약
- 임의의 전화번호가 다른 전화번호의 앞자리와 같으면 false를 반환, 그렇지 않다면 true를 반환해준다.
파이썬으로 제출한 정답
def solution(phone_book):
for i in range(len(phone_book)-1):
for j in range(i+1, len(phone_book)):
if len(phone_book[i]) < len(phone_book[j]):
#접두사가 하나라도 있으면 False
if phone_book[j].startswith(phone_book[i]):
return False
elif len(phone_book[i]) > len(phone_book[j]):
#접두사가 하나라도 있으면 False
if phone_book[i].startswith(phone_book[j]):
return False
#찾아봤는데 접두사가 없는 경우
return True
내가 생각한 로직(파이썬)
- 솔직히 이거 옛날에 푼 건데 보고 깜짝 놀랐다.. (너무 구려서)
- 각설하고, 일단은 두 전화번호를 비교하고, 그 둘이 서로의 전화번호로 시작하는지 확인해주었다.
자바로 제출한 정답
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
List<String> phoneBook = Arrays.asList(phone_book);
Collections.sort(phoneBook);
for(int i = 0; i < phoneBook.size()-1 ; i++){
String phoneNum1 = phone_book[i];
String phoneNum2 = phone_book[i+1];
if(phoneNum2.startsWith(phoneNum1)){
return false;
}
}
return true;
}
}
내가 생각한 로직(자바)
- 일단은 전부 sort 처리해주면, 길이+아스키코드 순으로 정렬해주기 때문에 서로 앞자리가 똑같거나 비슷한 문자열이 모이게 된다.
- 그러면 그 다음 전화번호부는 서로 앞자리들이 똑같고, 길이가 그 다음에는 무조건 길다는 것이 보장되기 때문에 for문을 한 번만 사용해서 startsWith 메서드를 이용해 비교해주었다.
'공부 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 네트워크(python/java) (0) | 2023.06.22 |
---|---|
[프로그래머스] 기능개발(python/java) (0) | 2023.06.22 |
[프로그래머스] 타겟 넘버(python/java) (0) | 2023.06.12 |
[프로그래머스] 모의고사(python/java) (0) | 2023.06.12 |
[프로그래머스] 완주하지 못 한 선수 (0) | 2023.06.11 |
Comments