일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- spring서버
- @IdClass
- 스프링부트오류
- github
- uncheck Exception
- git
- JPA
- Error creating bean with name
- 1차캐시
- JPA주의사항
- 스프링 부트 기능
- json
- JoinColumn
- 빈생성안됨
- json gson 차이
- 복합키
- jpa에러
- 인텔리제이
- jwt메서드
- 스프링 부트 공식 문서
- Q 클래스
- Filter
- ERD 작성
- 최종 프로젝트
- REST란
- jpa회원가입
- REST API 규칙
- Unsatisfied dependency
- Spring Spring boot 차이
- queryDSL
- Today
- Total
Everyday Dev System
[level 2] Title: 전화번호 목록 코드 개선:: List -> Set 본문
문제 링크 :
https://school.programmers.co.kr/learn/courses/30/lessons/42577
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
고득점 키트 해시 카테고리 문제 해설
https://sedate-nitrogen-21c.notion.site/4e2215495278436e905f4a4d181a2f20?pvs=4
고득점 키트 : 해시
1. 완주하지 못한 선수
sedate-nitrogen-21c.notion.site
문제 요약
해당 문제는 전화 번호부를 Stirng 배열 타입의 매개변수로 전달받아
접두사가 있는지 여부를 판단하는 문제 입니다.
있을 경우 FALSE 반환 , 없을 경우 TRUE 반환
시도
1. ArrayList 자료구조 활용
처음에 List로 하기 위해서 ArrayList 변수를 선언하여 시도하였으나, 잘되지 않았습니다.
이를 위해 정렬을 한 후, i번째 요소와 i+1번째 요소를 비교하였습니다.
Arrays.sort();
String.startsWith();
위의 메서드를 활용 하였습니다.
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
List<String> list = new ArrayList(Arrays.asList(phone_book));
Collections.sort(list);
for(int i=0; i<list.size()-1;i++){
String num1 = list.get(i);
String num2 = list.get(i+1);
if(num2.startsWith(num1)) return false;
}
return true;
}
}
>> 로직 설명
[119, 80922, 1192020, 110] 의 배열을 오름차순으로 정렬합니다.
결과 : [110, 119, 1192020, 80922]
i+1번째 요소(1192020)가 i번째 요소(119)로 시작할 경우 접두사가 있는 리스트이므로, false를 반환합니다.
if 문안에 들어오지 않을 경우는 접두사가 존재하지 않는 것이므로, true를 반환합니다.
2. HashSet 자료구조 활용
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Set<String> setList = new HashSet<>();
for(String book : phone_book){
setList.add(book);
}
for(String book : phone_book){
for(int i=1; i<book.length(); i++){
if(setList.contains(book.substring(0,i))) return false;
}
}
return true;
}
}
>> 로직 설명
Set 자료구조를 활용하여 저장합니다.
해당 setList [119, 80922, 1192020, 110] 의 요소 하나씩 접근하여 접두사 여부를 검사합니다.
"119" 의 경우 substring()을 통해
1
11
값이 setList에 있는지 찾습니다. 해당 값이 있을 경우 false 반환합니다.
String[] 혹인 int[] 배열에는 contains() 메서드가 없기 때문에 이를 활용하기 위해 Collections 자료구조를 활용한 것.
?
여기서 의문인 점은,, List를 활용한 코드가 메모리 측면에서 더욱 효율적이였다.
요소의 중복을 제거하기 위해 Set을 사용하는 것인가를 생각해보았으나, 아니다.
해당 문제를 잘 살펴보면 아래와 같은 제약 사항이 있다. 중복값은 애초에 존재하지 않는다는 전제이다.
중복을 제거해줄 필요가 없는데도 왜 HashSet을 써야 할까?
이것에 대해서는 아직 잘 모르겠습니다.
알아보는 대로 추가적으로 작성하겠습니다.
'have to > 자바 알고리즘' 카테고리의 다른 글
empty()와 isEmpty() 차이 (0) | 2023.11.21 |
---|---|
분수의 덧셈 문제 - 개선 (0) | 2023.10.24 |
문자열 겹쳐쓰기 문제 - 개선 (1) | 2023.10.24 |
문자열 합치기 (0) | 2023.10.24 |
배열 비교하기 (0) | 2023.10.18 |