///////
Search
🤖

알고리즘

폰켓몬

문제 설명

핵심 로직 생각해보기

최대 N/2 까지 고를 수 있다
종류는 중복되지 않게 골라야 한다 (순서는 상관없다)
N/2와 종류 갯수 중 더 작은 값을 반환한다
순서가 저장되지 않으며, 중복은 허용하지 않는 HashSet 을 사용하여 해결할 수 있다

구현해보기

import java.util.HashSet; class Solution { public int solution(int[] nums) { HashSet<Integer> set = new HashSet<>(); // nums의 요소를 set에 담는다 for (int e : nums) { set.add(e); } // set 크기와 N/2를 각각 변수로 초기화해준다 int setSize = set.size(); int halfLen = nums.length / 2; // setSize 와 halfLen 중 작은 값을 반환한다 return setSize > halfLen ? halfLen : setSize; } }
Java
복사

전화번호 목록

문제 설명

핵심 로직 생각해보기

문자열(전화번호)은 중복되지 않는다
다만 앞자리에서 문자열이 겹칠 수 있다
앞자리가 겹치는 경우, false 를 반환한다
중복이 없는 자료들을 효율적으로 탐색하는 HashMap을 사용하여 해결할 수 있다

구현해보기

import java.util.HashMap; import java.util.Map; class Solution { public boolean solution(String[] phone_book) { Map<String, String> map = new HashMap<>(); // phone_book 요소들을 map에 담는다 (value는 무관하다) for(int i = 0; i < phone_book.length; i++) { map.put(phone_book[i], ""); } // 각 번호의 앞자리 숫자로 시작하는 번호가 있는지 // 0자리에서 length() - 1자리까지 문자열을 잘라서 map에서 찾는다 for(String s : phone_book) { for(int i = 1; i < s.length(); i++) { if(map.containsKey(s.substring(0, i))) { return false; } } } return true; } }
Java
복사

참고 답안 (매개변수로 주어진 phone_book 배열 사용)

class Solution { public boolean solution(String[] phone_book) { for(int i = 0; i < phone_book.length - 1; i++) { for(int j = i + 1; j < phone_book.length; j++) { if(phone_book[i].startsWith(phone_book[j])) {return false;} if(phone_book[j].startsWith(phone_book[i])) {return false;} } } return true; } }
Java
복사