ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
    }
    반응형
Designed by Tistory.