중복 상관 없이 필수 과목 순서만 유지되면 된다. 큐에 미리 필수 과목을 순서대로 offer 해두고 String을 하나하나 탐색하면서 Q.contain(x)로 확인해본다. 큐 안에 있으면 수강한 거니까 poll 시키고 그 다음 진행한다. import java.util.*; public class Main { public String solution(String need, String plan) { String answer = "YES"; //초기화 Queue Q = new LinkedList(); for(char x : need.toCharArray()) Q.offer(x);//큐에 필수 과목 넣어두기 for(char x : plan.toCharArray()) { if(Q.contains(x)){//x가..
여는 괄호 나오면 stack에 push 닫는 괄호 나오면 바로 앞 인덱스 확인하고 여는 괄호면 레이저 import java.util.*; public class Main { public int solution(String str) { int answer = 0; Stack stack = new Stack(); for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == '(') { stack.push('('); } else { stack.pop(); if(str.charAt(i-1)=='(') answer+=stack.size(); //레이저 else answer++; //막대기의 끝 } } return answer; } public static void..
숫자 만나면 push()하고 연산자 만나면 pop() import java.util.*; public class Main { public int solution(String str) { int answer = 0; Stack stack = new Stack(); for (char x : str.toCharArray()) { if(Character.isDigit(x)) stack.push(x-48); // '5'-48을 해야 진짜 숫자 5가 나옴 ,'0'아스키코드는 48 else{ int rt=stack.pop(); int lt=stack.pop(); if(x=='+') stack.push(lt + rt); else if(x =='-') stack.push(lt - rt); else if(x =='*') ..
2차원 배열 board[행][열] moves 배열의 pos는 board의 열에 속한다. 하지만 borad의 인덱스 번호가 0부터 시작이므로 board[ ][pos-1]이 되어야한다. 그래야 pos가 1일 때 0번열을 탐색할 수 있다. for문을 돌려 board[i][pos-1] 탐색하여 인형을 발견하면 인형을 꺼내 스택에 넣는다. 인형을 꺼내면 0으로 변경한다. 이후 for문은 계속 돌면 안된다. (break 주의) peek()는 스택에서 값을 가져오기만 하고 pop()은 스택에서 아예 꺼내서 값을 가져온다. import java.util.*; public class Main { public int solution(int[][] board, int[] moves) { int answer = 0; Stac..
괄호 사이의 단어 처리는 닫는 괄호가 나오면 스택에서 여는 괄호가 나올 때까지 pop을 해서 꺼내버린다. import java.util.*; public class Main { public String solution(String str) { String answer = ""; Stack stack = new Stack(); for (char x : str.toCharArray()) { if (x == ')') { while(stack.pop()!='(');//제일 상단에 있는 값 꺼내고 return } else { stack.push(x); } } for(int i = 0; i
( 이 나오면 스택에 push() ) 이 나오면 스택에서 pop() 스택이 비어있는 경우에는 isEmpty()사용해서 비어있으면 true 차있으면 false 반환 import java.util.*; public class Main { public String solution(String str) { String answer = "YES"; Stack stack = new Stack(); for (char x : str.toCharArray()) { if (x == '(') { //여는 괄호 stack.push(x); } else { //닫는 괄호가 더 많은 경우 if(stack.isEmpty()) return "NO"; stack.pop(); } } //스택에 여는 괄호가 더 많은 경우 if(!stack..
import java.util.*; public class Main { public int solution(int n, int k, int[] arr) { int answer =-1; TreeSet Tset = new TreeSet(Collections.reverseOrder());//TreeSet의 원소는 Integer /* * Collection.reverseOrder()없으면 기본으로 오름차순으로 정렬됨 * 쓰면 내림차순 * */ //무조건 3장이므로 for문 사용 for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) {//i+1 : 중복하면 안되기 때문에 i뒤부터 돌아야함 for (int l = j + 1; l < n; l++) { Tset..