코딩 문제 풀이/프로그래머스
[프로그래머스] Lv3 문제풀이5(feat. JAVA)
코딩하는 랄로
2023. 10. 10. 21:42
반응형
불량 사용자
import java.util.*;
class Solution {
public int cnt = 0;
public Set<String> lst = new HashSet<>();
public void permutation(String[] user_id,String[] banned_id, int depth, int n, int r) {
if (depth == r) {
boolean wrong = false;
String[] slist = new String[r];
for(int i = 0; i < r; i++) {
if(banned_id[i].length() != user_id[i].length()){
wrong = true;
break;
}
for(int j = 0; j < banned_id[i].length(); j++) {
if(banned_id[i].charAt(j) == '*')
continue;
if(banned_id[i].charAt(j) != user_id[i].charAt(j)){
wrong = true;
break;
}
}
if(wrong)
break;
else
slist[i] = user_id[i];
}
if(!wrong) {
Arrays.sort(slist);
lst.add(String.join("", slist));
}
return;
}
for (int i = depth; i < n; i++) {
swap(user_id, depth, i);
permutation(user_id, banned_id,depth + 1, n, r);
swap(user_id, depth, i);
}
}
public void swap(String[] arr, int depth, int i) {
String temp = arr[depth];
arr[depth] = arr[i];
arr[i] = temp;
}
public int solution(String[] user_id, String[] banned_id) {
int answer = 0;
permutation(user_id, banned_id, 0, user_id.length, banned_id.length);
answer = lst.size();
return answer;
}
}
보석 쇼핑
import java.util.*;
class Solution {
public int[] solution(String[] gems) {
int[] answer = new int[2];
Set<String> set = new HashSet<>(Arrays.asList(gems));
int n = set.size();
int length = Integer.MAX_VALUE, left = 0;
HashMap<String, Integer> hmap = new HashMap<>();
for(int right = 0; right < gems.length; right++) {
hmap.put(gems[right], hmap.getOrDefault(gems[right], 0) + 1);
while(hmap.get(gems[left]) > 1) {
hmap.put(gems[left], hmap.get(gems[left]) - 1);
left++;
}
if(hmap.size() == n && length > (right - left)){
length = right - left;
answer[0] = left + 1;
answer[1] = right + 1;
}
}
return answer;
}
}
징검다리 건너기
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public class Stone {
int idx;
int num;
Stone(int idx, int num) {
this.idx = idx;
this.num = num;
}
}
public int solution(int[] stones, int k) {
int answer = stones[0];
Deque<Stone> dq = new LinkedList<>();
dq.add(new Stone(0, stones[0]));
for(int i = 1; i < stones.length; i++) {
if(dq.peekLast().num <= stones[i]) {
if(dq.peekFirst().num <= stones[i]) {
dq.clear();
} else {
while(dq.peekLast().num <= stones[i]){
dq.pollLast();
}
}
}
dq.add(new Stone(i, stones[i]));
if(dq.peekFirst().idx <= i - k) {
dq.pollFirst();
}
if(i < k)
answer = Math.max(answer, stones[i]);
else
answer = Math.min(answer, dq.peekFirst().num);
}
return answer;
}
}
반응형