-
백준 1874번 스택 수열 문제 풀이 Stack 활용 ( Java )Problem Solving/Java 2019. 9. 5. 12:40반응형12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394import java.io.*;import java.util.Stack;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// reader 생성BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));// writer 생성Stack<Integer> stack = new Stack<Integer>();// Stack 생성String input = "";// String 입력받을 변수 선언StringBuilder answer = new StringBuilder("");// 정답 더할 StringBuilder 생성String nStr = br.readLine();int n = Integer.parseInt(nStr);// 반복 갯수 입력받아서 형변환// 이전 값 저장할 변수int preVal = 0;// 첫 라인에서 입력받은 반복 갯수만큼 반복for (int i = 0; i < n; i++) {input = br.readLine();int inputNum = Integer.parseInt(input);// 문장을 입력받아 숫자로 만든다// 입력받은 숫자가 이전 숫자보다 크다면if (inputNum > preVal) {// 그 차만큼int repeatCount = inputNum - preVal;// 반복한다.for (int j = 0; j < repeatCount; j++) {// 이전값 증가시키고preVal++;// 증가시킨 값 스택에 넣고stack.push(preVal);// 정답 sb에 + 추가answer.append("+\n");// 마지막 반복 횟수가 되면if (j == repeatCount - 1) {// 하나를 pop하고stack.pop();// 정답 sb에 - 추가answer.append("-\n");}}} else {// 입력받은 숫자가 이전 숫자 보다 작을 경우// 스택이 비어있지 않을 경우if (!stack.isEmpty()) {// 입력한 숫자와 스택 가장 위 숫자가 같은지 확인하고// ( 그렇지 않을 이 수열을 완전히 만들 방법이 사라지므로 )if (inputNum == stack.peek()) {// 하나 빼고stack.pop();// 정답 sb에 - 추가answer.append("-\n");} else {// 아니면 NO만 StringBuilder에 더해 break;로 빠져나간다.answer = new StringBuilder("");answer.append("NO");break;}}}}// 모인 값 추가bw.write(answer.toString());br.close();bw.flush();bw.close();// reader와 writer를 닫는다}}반응형
'Problem Solving > Java' 카테고리의 다른 글
백준 17413 단어 뒤집기2 문제 풀이 Stack 활용 ( Java ) (0) 2019.10.19 백준 1158번 조세퍼스 문제 큐 활용 풀이 ( Java ) (0) 2019.09.05 백준 1406번 에디터 문제 Stack 활용 풀이 ( Java ) (0) 2019.09.05 백준 9012번 괄호 문제 풀이 Stack 활용 ( Java ) (0) 2019.09.05 백준 9093 단어 뒤집기 문제 풀이 Stack 활용 ( Java ) (0) 2019.09.04