Notice
                              
                          
                        
                          
                          
                            Recent Posts
                            
                        
                          
                          
                            Recent Comments
                            
                        
                          
                          
                            Link
                            
                        
                    | 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
                            Tags
                            
                        
                          
                          - 자바 자동캐스팅
 - 항해99 2기
 - 자바 삼항연산자
 - 프로그래머스
 - java
 - 자바 while문
 - 이클립스 DB연동
 - 타입스크립트
 - 자바 switch문
 - 자바
 - 항해99
 - 자바 if문
 - 조코딩
 - 자바 강제 캐스팅
 - 자바 구구단 출력
 - 변수
 - 자바 향상된 for문
 - 자바 public
 - 자바 공배수
 - 자바 for문
 - TypeScript
 - 정보처리기사실기
 - MySQL
 - Vue3
 - Til
 - 자바 반복문
 - react with typescript
 - 자바 스캐너
 - react ag grid
 - 자바 조건문
 
                            Archives
                            
                        
                          
                          - Today
 
- Total
 
뇌 채우기 공간
[프로그래머스] 전화번호 목록 java /효율성 성공! Arrays.sort 본문


나의 풀이
class Solution {
    public boolean solution(String[] phone_book) {
       boolean answer = true;
	        for (int i = 0; i < phone_book.length; i++) {
				for (int j = 0; j < phone_book.length; j++) {
					if (i==j) {
						continue;
					}
					if (phone_book[j].matches(phone_book[i]+"(.*)")) {
						answer=false;
					}
				}
			}
	        return answer;
    }
}
테스트 케이스는 통과했지만 효율성에서 모두 실패!
matches대신
 if(phone_book[j].indexOf(phone_book[i])==0)
indexOf를 써도 케이스는 통과하지만 효율성에서 실패
import java.util.HashMap;
class Solution {
    public boolean solution(String[] phone_book) {
     boolean answer = true;
    	HashMap<String,String> map = new HashMap<String,String>();
    	
    	for(int i=0;i<phone_book.length;i++)
    		map.put(phone_book[i], phone_book[i]);
    	
    	for(int i=0;i<map.size();i++){
    		String a = map.get(phone_book[i]);
    		for(int j=i+1; j<map.size(); j++) {
    			if(a.startsWith(phone_book[j]) || phone_book[j].startsWith(a)) {
    				answer = false;
    				break;
    			}
    		}
    		
    		if(answer == false)
    			break;
    	
        }
        return answer;
}
}
HashMap을 썼지만 효율성 실패!
import java.util.Arrays;
public class solution {
	
	  public boolean solution(String[] phone_book) {
	        boolean answer = true;
	     Arrays.sort(phone_book);
	     for (int i = 0; i < phone_book.length-1; i++) {
			if (phone_book[i+1].startsWith(phone_book[i])) {
				answer = false;
				break;
			}
		}
	       
	        return answer;
	    }
	}
Arrays.sort를 이용하여 정렬을 한다.
그렇게 정렬을 하면 요소의 길이는 고려하지 않고 숫자가 작은 것부터 정렬이 된다.


이렇게 정렬이 된다.
그러면 어떤 문자를 접두사로 포함하는 문자는 그 접두사 바로 뒤의 인덱스에 위치하도록 정렬이 된다고 볼 수 있다.
그러므로 바로 뒤에것만 비교를 해주면 되겠다.
728x90
    
    
  '알고리즘 > 프로그래머스 문제풀이' 카테고리의 다른 글
| [프로그래머스] 문자열 압축 javascript (0) | 2021.09.14 | 
|---|---|
| [프로그래머스] 위장 java / HashMap 사용 (0) | 2021.06.01 | 
| [프로그래머스] 가장 큰 수 java / 정렬/ Comparator, compare, compareTo 메소드로 String 오름차순 내림차순 정렬 (0) | 2021.05.28 | 
| [프로그래머스] 모의고사 java / 완전 탐색 / 완전 탐색 패턴은 나머지 연산자로 (0) | 2021.05.27 | 
| [프로그래머스] k번째 수 java / 배열 자르기 / 배열 정렬 /Arrays.copyOfRange (0) | 2021.05.26 |