프로그래머스
문제1 : https://school.programmers.co.kr/learn/courses/30/lessons/1845
문제2 : https://school.programmers.co.kr/learn/courses/30/lessons/42577
public class Pokemon {
public int choosemax(int[] nums){
int count = (nums.length)/2; // 선택할 수 있는 폰켓몬 수
Set<Integer> set = new HashSet<>();
for(int num:nums){ // nums의 배열을 1개씩 set에 넣어줌
// set의 특성을 활용해 중복 제거
set.add(num);
}
int answer = (set.size()>count)? count:set.size();
// set의 크기가 count보다 클경우 count 출력, 작을경우 set 원소개수 출력
return answer;
}
public static void main(String[] args) {
Pokemon p = new Pokemon();
int result1 = p.choosemax(new int[]{3,1,2,3});
int result2 = p.choosemax(new int[]{3,3,3,2,2,4});
int result3 = p.choosemax(new int[]{3,3,3,2,2,2});
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
}
}
public class CallBook {
public Boolean solution(String[] phone_book){
Set<String> set= new HashSet<>();
for(String phone : phone_book)
set.add(phone); // HashSet에 저장
for(int i=0; i<set.size(); i++){ // startWith() 메서드를 사용해서 비교할 수도 있음
System.out.println("길이 : "+phone_book[i].length());
for(int j =0; j< phone_book[i].length(); j++){
if(set.contains(phone_book[i].substring(0,j))) // 길이가 긴 값에서 값을 잘라 해당 값이 존재하는지 찾는다
// ex) (1) =[12], (2) =[123]일때
// (1)에서는 0~1 즉, [1]만 출력하여 자기 자신값으로 인해 false를 출력하는 것을 방지한다.
// (2)에서는 0~2 즉, [12]를 출력하여 (1)과 비교하여 접두어이므로 false를 반환한다.
return false;
System.out.println(phone_book[i].substring(0,j));
}
}
return true;
}
public static void main(String[] args) {
CallBook cb = new CallBook();
Boolean result1 = cb.solution(new String[]{"119","97674223","1195524421"});
Boolean result2 = cb.solution(new String[]{"123","456","789"});
Boolean result3 = cb.solution(new String[]{"12","123","1235","567","88"});
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
}
}