백준 문제 (10828, 10870,1934)

찬들이·2022년 7월 17일
0

알고리즘

목록 보기
6/42
post-custom-banner

문제 10828번(정답)

소스코드

import java.io.*;
import java.util.*;
public class boj10828 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        Stack stack = new Stack();
        int N = Integer.parseInt(br.readLine());
        for (int i = 0; i < N; i++) {
            String[] input = br.readLine().split(" ");
            String name = input[0];
            int num =-1;
            if(input.length != 1){
                num = Integer.parseInt(input[1]);
            }
            if(name.equals("push")){
                stack.push(num);
            }else if(name.equals("pop")){
                if(stack.isEmpty()){
                    sb.append(-1 + "\n");
                }else{
                    sb.append(stack.pop() +" \n");
                }
            }else if(name.equals("size")){
                sb.append(stack.size() + "\n");
            }else if(name.equals("empty")){
                if(stack.isEmpty()){
                    sb.append(1 +"\n");
                }else{
                    sb.append(0 + "\n");
                }
            }else if(name.equals("top")){
                if(stack.isEmpty()){
                    sb.append(-1+ "\n");
                }else{
                    sb.append(stack.peek() + "\n");
                }
            }
        }
        System.out.println(sb);
    }
}

풀이 접근

  1. 선형자료구조 Stack에 대해서 생각한다.
  2. 스택의 메소드들을 통해 문제에서 원하는 명령을 해결한다.

문제 핵심

  • stack 자료구조에 대해 알고 있는지!
  • stack 메소드들을 활용할 수 있는지!

문제 10870번

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class boj10870 {
    public static int fibonacci(int n){
        if(n ==0){
            return 0;
        }else if(n ==1) {
            return 1;
        }
        else{
            return fibonacci(n-1) + fibonacci(n-2);
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        System.out.println(fibonacci(n));
    }
}

풀이 접근

  1. 피보나치 수열의 구조를 그려본다.
  2. n=0일 때와 n=1일 때 값을 각각 0과 1로 설정하고 다른 경우에는 제귀함수를 돌린다.
  3. 계산 되어진 피보나치 수열의 값을 출력한다.

문제 핵심

  • 피보나치 수열에 대해서 이해 했는지!
  • 재귀함수로 구현할 수 있는지!

문제 1934번

소스코드

import java.io.*;
import java.util.*;
public class boj1934 {
    public static int gcd(int a, int b){
        if(a%b ==0){
            return b;
        }
        return gcd(b, a%b);
    }
    public static int solution(int a, int b){
        if(a == 1){
            return b;
        }
        int gcd = gcd(a,b);
        int lcm = a*b/gcd;
        return lcm;
    }
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;
        int t = Integer.parseInt(br.readLine());
        for (int i = 0; i < t; i++) {
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            sb.append(solution(a,b) + "\n");
        }
        System.out.println(sb);
    }
}

풀이 접근

  1. 최소 공배수를 구하는 방법을 그림으로 그려본다.
  2. 최소 공배수의 값은 a와 b의 수의 곱에 최대 공약수로 나눈 값과 같다.
  3. 제귀함수를 통해 gcd(최대 공약수)를 구하는 함수를 완성한다.
  4. gcd를 이용하여 lcm(최소 공배수)를 출력해 준다.

문제 핵심

  • 최대공약수와 최소공약수의 관계에 대해서 알고 있는지!
    • 반복문을 통해서 최소공약수만 구하려고 했을 때 메모리 초과가 떴음.
profile
Junior-Backend-Developer
post-custom-banner

0개의 댓글