문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42577?language=java
문자열
정렬
전화번호 배열을 정렬을 하면 매개변수가 string이기 때문에 크기순으로 정렬이 되지 않고 사전 순으로 정렬된다.
이를 이용해 현재 값이 다음 값의 접두어에 포함되는지 확인하면 되는 문제였다.
배열이 ["31", "13", "123", "3123145"]
로 주어졌다고 가정하자.
주어진 배열을 정렬하면["123", "13", "31", "3123145"]
와 같이 사전 순으로 정렬된다.
따라서 phone_book
을 정렬하고 for 문을 이용해 phone_book[i]
이 phone_book[i + 1]
이 포함되는지 확인하면 된다.
cpp
코드#include <bits/stdc++.h>
using namespace std;
bool solution(vector<string> phone_book) {
sort(phone_book.begin(), phone_book.end());
for (int i = 0; i < phone_book.size() - 1; i++) {
if (phone_book[i] == phone_book[i + 1].substr(0, phone_book[i].length()))
return false;
}
return true;
}
java
코드import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
for (int i = 0; i < phone_book.length - 1; i++) {
if (phone_book[i + 1].startsWith(phone_book[i]))
return false;
}
return true;
}
}
자바로 갈아타기 위해 자바로 풀기 시작했다.