목록자바 (8)
고코딩
[백준 17179번] 케이크 자르기 JAVA 케이크 자르기 이분탐색은 가장 감을 잡기 어려웠던 문제였다. 이분탐색이라는 것 자체는 알고 있었는데 이걸 활용하려고 하니 도대체 무엇을 탐색해야할지 모르겠다. 문제를 읽어보면 가장 작은 조각의 길이의 최대값을 출력하라라고 되어있다. 이분탐색에서는 우리가 찾고자하는 값을 정렬하여 이분탐색한다. 근데 문제에서 찾고싶은 값은 가장 작은 조각의 길이의 최대값? 가장 작으면서 최대값이라니 도저히 같이 쓰일수 없는 단어 두개가 같이 쓰였다.(작으며 최댁삾...) 이제부터 잘 생각해보자. 케익을 Q등분 할 것이다. Q등분 했을때 그중에는 가장 작은 길이를 가진 조각이 나온다 Q등분할 수 있는 방법은 엄청 많다. 이렇게 생각하면 갑자기 브루트포스 방식으로 풀어야 한다. 이렇..
자바의 최상위 클래스는 Object클래스이다. Object클래스에는 기본적으로 equals(), hashCode(), toString(), clone(), notify()등 여러 메소드가 존재한다. 그 중에서도 우리가 가장 많이 사용하는 equals()에 대해서 알아보자. ==연산자 처음 코딩을 배울때 '같다, 동등하다' 의 의미로 쓰는 것이 ==라고 배웠다 그래서 if(10 == 10)으로 작성해 if문을 실행하였다. 그때는 그저 같으면 됬지 라는 생각으로 사용하고 있었다. 그런데 어느 순간 String을 배우고 나니 equals()가 뿅 하고 나타났다. 그러고는 String은 객체여서 equals()로 비교해야 한다. 원래 그렇다 라고 밖에 설명을 듣지 못했다. 나는 그저 '아 ..
문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,000,000보다 크거나 같고, 10,0..
문제 요세푸스 문제는 다음과 같다. 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 이다. N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) 출력 예제와 같이 요세푸스 순열을 출력한다. 예제 입력 예제 출력 7 3 정답 처음에는 N만큼의 배열을 만든..
문제 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 다섯 가지이다. push X: 정수 X를 스택에 넣는 연산이다. pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 스택에 들어있는 정수의 개수를 출력한다. empty: 스택이 비어있으면 1, 아니면 0을 출력한다. top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. 입력 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보..
JAVA를 어느정도 공부하다보면 예외처리 오류를 해줘야 한다는 구문을 많이 만날 수 있었다. 입력할때마다 예외가 발생해 항상 try~catch구문으로 예외처리를 해주었는데 사실 정확한 의미와 구성 방식을 몰랐다. 심지어 throws와 throw는 누구도 알려준적이 없어서 처음으로 자바프레임워크를 사용했을 때 처음 보는 수식어 때문에 많이 당황했었다. 이 포스팅으로 예외처리에 대한 간단한 이해를 해보자. try~catch와 throws의 차이 try~catch의 의미를 검색해보면 발생한 예외를 처리한다. 라고 되어있고, throws는 예외처리가 발생한 메소드를 호출한 메소드에게 예외를 처리한다, 라고 되어있다. 처음 이 글을 읽었을때는 이게 무슨소리인가 싶었다. 하지만 잘 곱씹어 읽어보면 처리하는 순간이 ..
순회는 이진 트리에 있는 모든 노드를 한번씩 방문하여 노드가 가지고 있는 데이터를 처리하는 것이다. 여기서 처리라 함은 노드 안의 데이터를 출력할 수도 있고, 데이터 값을 변환할수도 있다. 순회의 종류에는 총3가지가 있다. 전위순회 중위순회 후위순회 현재 노드를 방문하여 데이터를 읽는 작업을 D또는 V라고 한다. 현재 노드의 왼쪽 서브트리로 이동하는 작업을 L이라고 한다. 현재 노드의 오른쪽 서브트리로 이동하는 작업을 R이라고 한다. 전위 순회 전위 순회의 순서는 현재노드(V) -> 왼쪽 서브트리(L) -> 오른쪽 서브트리(R) 순으로 순회 한다. VLR 이라고도 부른다. 전위 순회로 트리를 순회하면 방문하는 노드의 순서이다. 중위 순회 중위 순회의 순서는 왼쪽 서브트리(L) -> 현재노드(V) -> 오..