algorithm/알고리즘 풀이 내역
[Programmers] 해시.전화번호 목록
buddev
2025. 4. 20. 19:07
https://school.programmers.co.kr/learn/courses/30/lessons/42577
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
어려운 문제는 아니고 간단하지만 약간의 고민이 필요한 문제 (그냥 풀면 효율성 채점에서 틀림)
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Set<String> set = new HashSet<>();
Set<String> original = new HashSet<>();
for (String str : phone_book) {
original.add(str);
}
for (String str : phone_book) {
// 자기 자신은 제외해야 함
for (int i = 0; i < str.length(); i++) {
if (!set.add(str.substring(0, i + 1))) {
if (original.contains(str.substring(0, i + 1))) {
return false;
}
}
}
}
return true;
}
}
자기 자신은 제외하는게 좋음
현재 코드에서는 효율성을 위해 set을 두개 쓰기 때문에 상관없지만
set을 하나만 쓰는 경우 실패하게 됨
ex) 1234라는 값이 있으면 - 1, 12, 123, 1234 모두를 set에 넣게되어 무조건 false가 반환된다.
현재 코드에서는 자기 자신을 포함하더라도 원본 값 set인 Original에서 한번 더 값을 체크하기 때문에 성공하지만
굳이 넣을 필요가 없으므로 (의미상 안 넣는게 맞음), 빼는게 더 낫다고 생각함