programmers.co.kr/learn/courses/30/lessons/42577
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조
programmers.co.kr
나의 첫 Level 2 문제!
비슷한 거 같으면서도 역시나 쉽지는 않았다.
이번 문제는 해시에 대하여 잘 알아야 한다고 하는데,

라고 설명하고 있다.
그리하여 나는 for문을 이용하여 배열의 [i] 값을 key값이라고 가정하고 그에 맞는 value값을 [i+1]로 지정하여 비교해주면서 코딩을 하였다.
처음에는 substring 메소드를 사용하여 작성하였는데, 정확성은 100%였지만 효율성에서 계속 문제가 틀렸다. 처리속도를 빠르게 해주는 부분을 계속 고민해보다가 startWith라는 함수를 사용해보았는데, 코딩만 편하지 그대로였다.
계속 고민을 해보다 보니 내 코드에는 쓸데없는 부분이 발견되었는데, 그건 이중 포문을 돌리는데 서로 일일이 모두 다 비교하기 때문에 비교해야 하는 배열이 커질수록 처리속도도 느려진다는 점이었다.
하여 Arrays.sort메서드를 이용하여 오름차순으로 정렬 해준 후에 해당 배열과 그 배열의 다음 값만을 비교해주고 false가 나올 시 즉각 break를 걸어서 최대한 빠르게 함수가 마무리되게 끔 작성하였다.
public class phoneNumList {
public static void main(String[] args) {
String[] phone_book = {"119", "97674223", "1195524421"};
solution(phone_book);
}
public static boolean solution(String[] phone_book) {
boolean answer = true;
Arrays.sort(phone_book);
// 숫자 오름차순으로 배열 정렬
System.out.println(Arrays.toString(phone_book));
for (int i = 0; i < phone_book.length-1; i++) {
// 배열의 길이 -1 만큼 for문 반복
if(phone_book[i+1].startsWith(phone_book[i])) {
// i+1이 i의 값을 포함한다면 false 리턴하기
answer = false;
break;
}
}
System.out.println(answer);
return answer;
}
}
HashSet, List, Map
과 같은 메소드를 사용하시는 분들도 다수계셨으나 거의 300명 이상 나와 비슷하게 풀었기에 의도를 파악하고 잘 풀었다고 가정해본다....
[깃허브]
RUCKUSJERRY/practiceOfJava
Contribute to RUCKUSJERRY/practiceOfJava development by creating an account on GitHub.
github.com
'문제풀이 > 프로그래머스' 카테고리의 다른 글
기능개발 / 프로그래머스 연습문제 / programmers / level2 / java / 스택,큐 (0) | 2021.05.07 |
---|---|
위장 / 프로그래머스 연습문제 / programmers / level2 / java (0) | 2021.05.06 |
로또의 최고 순위와 최저 순위 / 프로그래머스 연습문제 / programmers / level1 / JavaScript (0) | 2021.05.04 |
소수 만들기 / 프로그래머스 연습문제 / programmers / level1 / java (0) | 2021.05.03 |
체육복 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.05.02 |