매일 Algorithm

신재원·2023년 6월 9일
1

Algorithm

목록 보기
140/243

백준 9093번

  • 시간 초과 코드 (Stack 이용)
import java.util.Scanner;
import java.util.Stack;

public class problem459 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int size = in.nextInt();
        in.nextLine(); // 개행 제거

        while (size-- > 0) {
            Stack<Character> stack = new Stack<>();
            String input = in.nextLine(); // 문자열 입력


            for (char ch : input.toCharArray()) {
                // 문자열중 공백을 만날경우
                if (ch == ' ') {
                    // stack이 비어있지 않을때 까지 반복
                    while (!stack.isEmpty()) {
                        System.out.print(stack.pop());
                    }
                    System.out.print(" ");
                } else {
                    stack.push(ch);
                }
            }
            // 마지막 단어 출력
            while (!stack.isEmpty()) {
                System.out.print(stack.pop());
            }
            System.out.println();
        }

    }
}
  • 정답 코드 (StringBuilder 의 reverse() 사용)
import java.util.Scanner;

public class problem459 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int size = in.nextInt();
        in.nextLine(); // 개행 제거


        while (size-- > 0) {
            StringBuilder output = new StringBuilder();
            String[] input = in.nextLine().split(" "); // 공백기준 split

            for (String str : input) {
                // 문자열 reverse
                StringBuilder reverse = new StringBuilder(str).reverse();
                output.append(reverse).append(" ");
            }
            System.out.print(output.toString());
            output.append("\n");
        }

    }
}

백준 9012번

import java.util.Scanner;
import java.util.Stack;

public class problem460 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int size = in.nextInt();
        in.nextLine(); // 개행 제거

        while (size-- > 0) {
            Stack<Character> stack = new Stack<>();
            String input = in.nextLine();
            boolean flag = true;
            for (char ch : input.toCharArray()) {
                if (ch == '(') {
                    stack.push(ch);
                }
                // ( 괄호가 아니면 나머지는 ')' 임으로 pop
                else {
                    if (stack.isEmpty()) {
                        flag = false;
                        break;
                    }
                    stack.pop();
                }
            }
            // ( 여는 괄호만 쌓였을 경우
            if(!stack.isEmpty()) flag = false;
            if (flag) {
                System.out.println("YES");
            } else {
                System.out.println("NO");
            }
        }
    }
}

백준 1158번

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class problem461 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();
        StringBuilder output = new StringBuilder();
        Queue<Integer> queue = new LinkedList<>();

        output.append("<");
        for (int i = 1; i <= n; i++) {
            queue.offer(i);
        }
        while (queue.size() > 1) {
            for (int i = 0; i < k - 1; i++) {
            
            	// k번째 이전의 숫자를 큐의 뒤로 미룬다.
                queue.offer(queue.poll()); 
            }
            output.append(queue.poll()).append(", ");

        }
        output.append(queue.poll()); // 큐에 남은 마지막 숫자
        output.append(">");

        System.out.println(output.toString());
    }
}

0개의 댓글