문제 링크 : https://programmers.co.kr/learn/courses/30/parts/12077
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2번 문제 : 전화번호 목록
문제 설명
내가 한 풀이
(subStirng()으로 잘라도 되지만 startWith()를 처음봐서 한번 써보았다.)
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
//접두사를 보는것이라서 정렬을 해 놓으면 이중 for문을 쓸 필요가 없다.
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;
}
}
Hash를 사용한 풀이(이게 더 효과적인지는 모르겠음......)
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
HashMap<String, Integer> map = new HashMap<String, Integer>();
//hash객체안에 Array안에 있는 데이터를 모두 쪼개어서 넣는다.
//각 데이터마다 쪼개진 데이터를 넣고 자기 자신의 데이터는 안넣는다.
//예 : '119' --> '1', '11' 이 들어간다. (포함관계에 넣지 않기 위함)
for(int i = 0; i < phone_book.length; i++) {
for(int j = 0; j < phone_book[i].length()-1; j++) {
map.put(phone_book[i].substring(0, j+1), 0);
}
}
//containsKey()메소드로 해당 String 값이 map에 있나 체크함
for(int i = 0; i < phone_book.length; i++) {
if(map.containsKey(phone_book[i])) {
answer = false;
break;
}
}
return answer;
}
}
'코딩테스트 연습' 카테고리의 다른 글
[프로그래머스] 수박수박수박수박수박수? (0) | 2022.04.11 |
---|---|
[프로그래머스] 폰켓몬 (0) | 2022.04.11 |
[프로그래머스 코딩테스트 연습] 해시 3 (0) | 2020.04.25 |
[프로그래머스 코딩테스트 연습] 해시 1 (0) | 2020.04.20 |
코딩테스트 시작하기 (0) | 2020.04.20 |