문제정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.입력첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.출력X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.예제 입력 1 복사10 51 10 4 9 2 3 8 5 7 6예제 출력 1 복사1 4 2 3 1. Scanner 배열 사용import java.util.*;public class Main { public static void main (String[] args) { ..
중복 상관 없이 필수 과목 순서만 유지되면 된다. 큐에 미리 필수 과목을 순서대로 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..