-
[Algorithm] 프로그래머스 Lv2 전화번호 목록Etc./Algorithm 2021. 3. 10. 14:44
안녕하세요 rosepurple입니다. :)
오늘 푼 알고리즘 문제 풀이를 작성해보도록 하겠습니다!
문제
오늘은 아래 문제를 풀어봤습니다. (약 35분 소요)
programmers.co.kr/learn/courses/30/lessons/42577
풀이
처음에는 이중 for문을 순회하면서 String들을 startsWith로 비교했는데, 효율성 검사에서 실패했습니다.
그러다가 문제 카테고리가 해시인 것을 파악하고 HashSet을 활용했습니다.
그리고 매개변수로 주어지는 배열을 정렬하지 않고, 문자열을 substring으로 쪼개가면서 HashSet에 포함되어있는지 여부를 살펴봤습니다.
boolean answer = true; HashSet<String> hashSet = new HashSet<>();
위와 같이 매개변수로 주어지는 phont_book 요소들을 넣어줄 HashSet을 선언해줍니다.
for (int i = 0; i < phone_book.length; i++) { hashSet.add(phone_book[i]); }
앞에서 말한 것 처럼 매개변수로 주어지는 phone_book 요소들을 HashSet에 넣어줍니다.
for (String phone: phone_book) { for (int len = 1; len < phone.length(); len++) { if (hashSet.contains(phone.substring(0, len))) answer = false; } }
그 다음에 이중 for문을 순회하면서 HashSet에 해당 문자열의 일부가 포함되어있는지를 확인합니다.
만약 포함되어있다면 answer을 false로 바꾸고, 아니라면 계속 순회합니다.
전체 코드
class Solution { public boolean solution(String[] phone_book) { boolean answer = true; HashSet<String> hashSet = new HashSet<>(); for (int i = 0; i < phone_book.length; i++) { hashSet.add(phone_book[i]); } for (String phone: phone_book) { for (int len = 1; len < phone.length(); len++) { if (hashSet.contains(phone.substring(0, len))) answer = false; } } return answer; } }
마무리
만약 궁금한 점이 있으시다면 편하게 댓글 남겨주세요!
이번 포스팅도 읽어주셔서 감사합니다. :)
'Etc. > Algorithm' 카테고리의 다른 글
[Algorithm] 프로그래머스 Lv3 단어 변환 (0) 2021.03.13 [Algorithm] 프로그래머스 Lv2 더 맵게 (0) 2021.03.09 [Algorithm] 프로그래머스 Lv2 다리를 지나는 트럭 (0) 2021.03.09 [Algorithm] 프로그래머스 Lv2 큰 수 만들기 (0) 2021.02.24 [Algorithm] 프로그래머스 Lv2 주식가격 (42584) (0) 2021.02.23