-
1. 전화번호 목록코딩 테스트/Level 2 2019. 11. 8. 00:04반응형
https://programmers.co.kr/learn/courses/30/lessons/42577
파이썬
def solution(phone_book): for num1 in phone_book: for num2 in phone_book: if num1 != num2: k = min(len(num1), len(num2)) if num1[:k] == num2[:k]: return False return True """ 효율성 테스트 테스트 1 〉 통과 (0.16ms, 15.3MB) 테스트 2 〉 통과 (0.15ms, 15.3MB) """
자바
향상된 for 문을 사용하지 않고 고전적으로 ... 읽기 싫어지네요.
class Solution { public boolean solution(String[] phone_book) { for (int i = 0; i < phone_book.length; i++) { for (int j = 0; j < phone_book.length; j++) { if (i == j || phone_book[i].length() > phone_book[j].length()) continue; if (phone_book[i].equals(phone_book[j].substring(0, phone_book[i].length()))) return false; } } return true; } } /* 효율성 테스트 테스트 1 〉 통과 (3.86ms, 61.4MB) 테스트 2 〉 통과 (3.21ms, 54.4MB) */
향상된 for 문을 사용해 보았습니다. 잘 읽힙니다.
자바에서 for문과 향상된 for문의 실행 시간 차이는 거의 없습니다.class Solution { public boolean solution(String[] phone_book) { for (var i: phone_book) { for (var j: phone_book) { if (i == j || i.length() > j.length()) continue; if (i.equals(j.substring(0, i.length()))) return false; } } return true; } } /* 효율성 테스트 테스트 1 〉 통과 (3.21ms, 57.8MB) 테스트 2 〉 통과 (2.90ms, 58.1MB) */
이렇게 수정하니 3.5배 정도 빨라졌네요.
class Solution { public boolean solution(String[] phone_book) { for (var i : phone_book) { for (var j : phone_book) { if (i.equals(j)) continue; var k = Math.min(i.length(), j.length()); if ((i.substring(0, k).equals(j.substring(0, k)))) return false; } } return true; } } /* 효율성 테스트 테스트 1 〉 통과 (0.88ms, 59.3MB) 테스트 2 〉 통과 (0.85ms, 60MB) */
golang
func solution(phone_book []string) bool { for i := 0; i < len(phone_book)-1; i++ { for j := i + 1; j < len(phone_book); j++ { var s1, s2 string if len(phone_book[i]) > len(phone_book[j]) { s1 = phone_book[i][:len(phone_book[j])] s2 = phone_book[j] } else { s1 = phone_book[i] s2 = phone_book[j][:len(phone_book[i])] } if s1 == s2 { return false } } } return true }
반응형