반응형
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 |
Tags
- 알고리즘
- @Data
- @configuration
- 쿠버네티스
- @Getter
- 커링
- 롬복 어노테이션
- 루씬 인 액션
- 크론 표현식
- 모던 자바 인 액션
- 검색 기능 확장
- Java
- @Setter
- kubenetes
- 영속 자료구조
- 정렬
- 전화번호 목록
- K번째수
- 다리를 지나는 트럭
- 프로그래머스
- 가장 큰 수
- 고차원 함수
- 완주하지 못한 선수
- 기능개발
- 코딩 테스트
- H-index
- 스택/큐
- @EnableScheduling
- 해시
- 스프링 스케쥴러
Archives
- Today
- Total
Today I Learned
[프로그래머스] 해시 Level 2. 전화번호 목록 (JAVA) 본문
728x90
n+(n-1)+(n-2)+...+1 해서 n^2 나오나 했는데, 생각해보니까 정렬해서 바로 아래 값이랑만 비교하면 되겠더라고.
가나다
가나다라마바사
가나라
이런식으로 정렬될꺼아냐?
시간복잡도는 정렬시간인 nlogn으로 나올것같다.
그래서 풀기는 금방 풀었는데...
코드
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
for(int i = 0; i < phone_book.length-1; i++){
if(phone_book[i+1].startsWith(phone_book[i])){
return false;
}
}
return true;
}
}
결과
근데 해시 문제잖아?
해시로 풀어야될거같은데 아무리 생각해도 모르겠어서 다른 사람 풀이를 찾아봤다.
코드
import java.util.HashMap;
class Solution {
public boolean solution(String[] phone_book) {
HashMap<String, Integer> hashMap = new HashMap<String,Integer>();
for(String phone : phone_book){
hashMap.put(phone, 1);
}
for(String phone : phone_book){
for(int idx=0; idx<phone.length(); idx++){
if(hashMap.containsKey(phone.substring(0,idx))){
return false;
}
}
}
return true;
}
}
결과
2중 for문이긴하지만 두번째 for문은 phone_book이 아니라 각 전화번호 길이 만큼만 돈다!
이러면 두번째 for문은 최대길이 20밖에 안되니까 상수취급해서 시간복잡도 n이라고 해도 되지않을까...??
hash를 사용한 여러가지 풀이가 있었지만 이게 제일 맞는거같다.
(대부분은 나처럼 sort 썼더라...)
728x90
'알고리즘 & 코딩테스트' 카테고리의 다른 글
[프로그래머스] 정렬 Level 2. 가장 큰 수(JAVA) (0) | 2021.01.24 |
---|---|
[프로그래머스] 정렬 Level 1. K번째수(JAVA) (0) | 2021.01.22 |
[프로그래머스] 해시 Level 3. 베스트앨범(JAVA) (0) | 2021.01.21 |
[프로그래머스] 해시 Level 2. 위장 (JAVA) (0) | 2021.01.20 |
[프로그래머스] 해시 Level 1. 완주하지 못한 선수 (JAVA) (0) | 2021.01.18 |
Comments