중복을 허용하지 않는다. 오름차순 정렬
set은 보통 중복제거를 위해 사용한다.
내림차순 정렬
입력 value값을 삭제한다.
원소의 개수를 반환한다.
첫/마지막 원소를 반환한다.
-내림차순이면 가장 큰 값 / 오름차순이면 가장 작은 값 반환. (last:반대)
✏️ 문제
* 설명
현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가 여러장 있을 수 있습니다.
현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다.
기록한 값 중 K번째로 큰 수를 출력하는 프로그램을 작성하세요.
만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값은 22입니다.
* 입력
첫 줄에 자연수 N(3<=N<=100)과 K(1<=K<=50) 입력되고, 그 다음 줄에 N개의 카드값이 입력된다.
* 출력
첫 줄에 K번째 수를 출력합니다. K번째 수가 존재하지 않으면 -1를 출력합니다.
🔍풀이
TreeSet(Collections.reverseOrder()) 을 이용해 중복제거 + 내림차순으로 값을 넣어준 뒤, int index를 통해서 k번째 값을 출력한다.
public int solution(int n, int k, int[] arr){
int answer = 0;
TreeSet<Integer> Tmap = new TreeSet<>(Collections.reverseOrder());
for(int i = 0; i < n; i++){
for(int j = i+1; j < n; j++){
for(int l = j+1; l < n; l++){
Tmap.add(arr[i]+arr[j]+arr[l];
}
}
}
int kth = 0;
if(Tmap.size() < k) answer = -1;
else{
for(int i : ts){
kth++; //0번째인덱스 ->1번째 큰 수
if(kth == k) answer = i;
}
}
return answer;
}
First In Frist Out 구조.
push와 pop, isEmpty가 주로 사용된다.
✏️ 문제
* 설명
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
* 입력
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
* 출력
첫 번째 줄에 YES, NO를 출력한다.
🔍풀이
Stack을 이용해 우괄호와 좌괄호를 개수를 셈한다.
public String solution(String str) {
String answer = "YES";
Stack stack = new Stack<>();
for(char c : str.toCharArray()){
if(c == '(') stack.push(c);
else{
if(stack.isEmpty()) return "NO";
stack.pop();
}
}
if(!stack.isEmpty()) return "NO";
return answer;
}