BaekJoon 1874, 스택 수열

이문제는 스택을 이용해서 문제를 푸는 것입니다. https://www.acmicpc.net/problem/1874 위에서 문제 확인 가능합니다. ^^ 현재 a[t] 값보다 작으면 계속해서 push를 해줍니다. 같으면 pop을 해주고 크면 수열을 만드는 것이 불가능 합니다. 처음에는 순서가 중간 것, 큰 것, 작은 것 이렇게 있으면 sorting을 할 수 없다는 것을 알고 있었기 때문에  이 방식으로 하다가 안되서 다른 방법으로 풀었습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import java.io.* ; import java.util.ArrayList ; import java.util.Stack ; public class B1874 { static int N; static int [] a = new int [ 100001 ]; static ArrayList<Character> list = new ArrayList<>(); static Stack<Integer> s = new Stack<>(); static boolean makeSeries = true ; public static void main (String[] args) throws IOException{ BufferedReader br = new BufferedReader( new InputStreamReader(System. in )); BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(Syst...

BaekJoon 6591, 이항 쇼다운 조합문제

조합의 수를 구하는 알고리즘을 짜면 되는 심플한 문제입니다. https://www.acmicpc.net/problem/1011 일단 팩토리얼을 구해서 곱하고 나누고 하는 문제가 아니라, 중간 과정에서 나눠 주는 것이 포인트입니다. 안그러면  int 범위를 벗어나서 값이 이상해집니다. 저는 gcd를 이용해서 값을 나눠주면서 계산을 했습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 import java.io.* ; public class B6591 { static int N, M; static int [] a = new int [ 101 ]; static int [] b = new int [ 101 ]; static String in; public static void main (String[] args) throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader(System. in )); BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(System. out )); while (!(in = br. readLine ()). equals ( "0 0" )) { N = Integer. parseInt (in. split ( " " )[ 0 ]); M = Integer. parseInt (in. s...

BaekJoon 10866, 덱 구현

이번 문제는 덱을 구현하는 문제를 풀어봤습니다. https://www.acmicpc.net/problem/10866 문제는 위에서 확인 가능합니다. 덱을 구현하는 것은 크게 어려운 점이 없었지만, push를 구현할 때, pointer를 조심해야 한다는 것을 깨달았습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 import java.io.* ; import java.util.ArrayList ; public class B1021 { static int N, M, count = 0 , first; static String in, ins[]; static ArrayList<Integer> numbers = new ArrayList<>(); static ArrayList<Integer> list = new ArrayList<>(); public static void main (String[] args) throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader(System. in )); BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(System. out )); in = br. readLine (); N = Integer. parseInt (in. split ( " " )[ 0 ]); M = Integer. par...

BackJoon 1021, 회전하는 큐 - deque 문제

이번 문제는 덱(deque)를 사용하는 문제를 가지고 왔습니다. https://www.acmicpc.net/problem/1021 이 문제는 생각하기가 어려웠던 문제입니다. 환형 큐를 돌리면서 최소한으로 움직여서 원하는 값들을 빼내는 문제입니다. 제가 실수 했던 부분이 deque의 특성 상, 앞과 뒤 모두 polling을 할 수 있습니다. 그래서 출구가 2개라고 생각하고 데이터를 뺐습니다. 하지만 이 문제에서는 출구가 하나라고 생각하고 풀어내야하죠. 그리고 큐를 돌리는 방향도 생각을 해야하지만, 저는 무조건 왼쪽으로만 돌리고 큐 사이즈의 반보다 크면 사이즈에서 지금까지 회전한 횟수를 빼는 형식으로 구했습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 import java.io.* ; import java.util.ArrayList ; public class B1021 { static int N, M, count = 0 , first; static String in, ins[]; static ArrayList<Integer> numbers = new ArrayList<>(); static ArrayList<Integer> list = new ArrayList<>(); public static void main (String[] args) throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader(System. in )); BufferedWrite...

BackJoon 1011, Fly me to the alpha centauri, 규칙 찾기 문제

오랜만에 글을 올리게 되네요. https://www.acmicpc.net/problem/1011 위 링크에서 문제 확인 가능합니다. 이 문제는 최소로 공간이동 장치를 사용해서 이동할 수 있는데, 마지막에는 꼭 1로 이동을 해야한다는 조건이 있어서 조금 까다롭습니다. 즉, 보면 다음과 같이 이동이 가능합니다. 1 11 = 2 121    = 4 1221  = 6 1211  = 7 12321   = 9 123321 123221 .... 이런 식인데 대충 알아 냈겠지만 규칙이 존재합니다. 바로  자리수를 기준으로 나누는 겁니다. 2자리의 경우 11이 최대이고 3자리의 경우 121, 4자리는 1221, 5자리는 12321 ... 쭉 생깁니다. 예를 들어 이동하려는 거리가  7 이면 7보다 작거나 같은 곳의 인덱스를 찾으면 됩니다. 바이너리 서치를 통하면 더욱 빠르게 접근할 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 import java.io.* ; import java.util.Arrays ; public class B1011 { static int T, x, y, ans, e; static long [] md = new long [ 100000 ]; static long pos; static String in; public static void main (String[] args) throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader(System. in )); ...

Comparator in Java

 이전 글에서는 Comparable에 대해서 정리해 보았습니다. 이번 글은 Comparator에 대해서 정리를 해볼 생각입니다. Comparable의 단점은 무엇 일까요?  굳이 단점을 들자면 만약 객체 비교 방법을 다르게 비교하고 싶다면 Comparable을 매번 수정해야하는 불편함이 생기겠죠. 그래서 있는 것이 Comparator라고 생각하시면 간단할 것 같아요. Comparator  일단 사용법을 먼저 보고 가죠. 1 2 3 4 5 6 7 8 Arrays.sort(object, new Comparator() { @ Override public int compare( Object o1, Object o2) { String s1 = o1.str; String s2 = o2.str; return s1.compareTo(s2); } });  sort의 2번째 파라미터로 comparator 객체를 생성하고 overriding을 해주면 원하는 형태로 객체를 비교할 수 있도록 해줍니다.

Comparable in Java

안녕하세요, 이번 Posting은 java의 comparable에 대해서 설명하도록 하겠습니다. Comparable       C omparable을 사용하시는 분들이 많을 것으로 생각되는데, 저 또한 알고리즘을 풀 때 자        사용하고 있습니다. 사용 법은 다음과 같습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Point implements Comparable<Point> { int x, y; Point( int x, int y) { this .x = x; this .y = y; } @ Override public int compareTo(Point o) { if (x > o.x) return 1 ; else if (x < o.x) return - 1 ; else { if (y > o.y) return 1 ; else if (y < o.y) return - 1 ; else return 0 ; } } }   Comparable class를 상속 받은 후 compareTo() 메소드를 overriding하여 객체를 비교할 수 있도록 해주는 역할을 하게 되죠. 예를 들어 Arrays.sort()를 사용할 때, 객체간의 비교를 위의 compareTo() 메소드를 사용하여 sorting을 하게 되죠.    저도 항상 헷갈리는 것이 있는데 compareTo() 메소드의 return 값입니다. 객체 자신과 파라미터로 넘어온 객체와 비교를 할 때, 만약 객체 자신이 크다면 양수를 ...