네번째 코딩테스트 시간입니다.
이번엔 level 2에 대한 두려움을 가지고 시작했지만 생각보다 어렵지 않았습니다.
문제는
https://programmers.co.kr/learn/courses/30/lessons/42577
요거 였습니다.
간략하게 문제를 요약하자면
전화번호 목록중 특정 전화번호가 다른 전화번호의 접두사(앞부분)인지 확인하는 문제였습니다.
처음에 생각한 방법은 문제를 제대로 확인 안하고 전화번호 배열이 숫자인줄 알았기때문에
log 등의 메소드를 써서 자릿수 비교를 통해 해결하려했습니다.
다시 문제를 보니 String 형태였고 substring으로 해결할 수 있을거라 생각했습니다.
처음 배열을 sort메소드를 사용해 정렬한 후
2중 for문으로 들어가 비교를 시작 이 때 비교문 작성은 생각보다 쉬웠습니다.
앞에꺼 만큼의 길이만큼 잘라서 확인하면되었으니까요
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
Arrays.sort(phone_book);
for(int i = 0; i < phone_book.length; i++){
for(int j = i+1; j < phone_book.length; j++){
try{
if(phone_book[i].equals(phone_book[j].substring(0,phone_book[i].length()))){
return false;
}
} catch (StringIndexOutOfBoundsException e){
}
}
}
return answer;
}
}
try catch 는 배열 비교 중에 String substring 중 인덱스 에러를 잡기 위해 넣었습니다.
결과는 한번에 통과 특이하게도 이번엔 효율성에 걸리지 않았다.
다른사람의 코드를 보니 startswith 라는 자바 메소드를 썼던데 처음보는 메소드라 신기했다.
이 메소드는 간단하게 해당 문자가 비교 문자의 앞에 시작하냐 아니냐를 묻는 메소드다.
예를 들면
'abc' 는 'abcdef' 의 앞으로 시작하기 때문에 true를 반환한다.
'a'도 마찬가지다
'b'는 false를 반환한다.
근데 문제는 해시 문젠데 해시로 푼 결과가 없다.
참 난감하다
'기초 공부 > 코딩테스트 연습' 카테고리의 다른 글
[코딩테스트 #5] 백준 10828 스택 - python (0) | 2020.07.16 |
---|---|
[코딩테스트 #3] k번째 수(정렬) level1 - java (0) | 2020.02.11 |
[코딩테스트 #2] 완주하지 못한 선수(해시) level1 - java (0) | 2020.02.06 |
[코딩테스트 #1] 문자열 압축(2020 KAKAO BLIND RECRUITMENT) level1 - java (0) | 2020.02.02 |