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); } }
- 선형자료구조 Stack에 대해서 생각한다.
- 스택의 메소드들을 통해 문제에서 원하는 명령을 해결한다.
- stack 자료구조에 대해 알고 있는지!
- stack 메소드들을 활용할 수 있는지!
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)); } }
- 피보나치 수열의 구조를 그려본다.
- n=0일 때와 n=1일 때 값을 각각 0과 1로 설정하고 다른 경우에는 제귀함수를 돌린다.
- 계산 되어진 피보나치 수열의 값을 출력한다.
문제 핵심
- 피보나치 수열에 대해서 이해 했는지!
- 재귀함수로 구현할 수 있는지!
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); } }
- 최소 공배수를 구하는 방법을 그림으로 그려본다.
- 최소 공배수의 값은 a와 b의 수의 곱에 최대 공약수로 나눈 값과 같다.
- 제귀함수를 통해 gcd(최대 공약수)를 구하는 함수를 완성한다.
- gcd를 이용하여 lcm(최소 공배수)를 출력해 준다.
- 최대공약수와 최소공약수의 관계에 대해서 알고 있는지!
- 반복문을 통해서 최소공약수만 구하려고 했을 때 메모리 초과가 떴음.