문제 - 최대한 많은 곡을 제대로 연주하려고 할 때, 필요한 기타의 최소 개수 - 첫째 줄에 기타의 개수 N(10보다 작거나 같은 자연수)과 곡의 개수 M(50보다 작거나 같은 자연수)이 주어짐 - 둘째 줄부터 N개의 줄에 기타 이름과 연주할 수 있는 곡의 정보가 주어짐 - 연주할 수 있는 곡은 Y/N로 주어짐 - 필요한 기타의 개수를 출력. 연주할 수 있는 곡이 없으면 -1 해결방법 조합으로 2개의 기타부터 여러 개의 기타까지 선택해서 해당 기타들이 연주할 수 있는 곡의 여부를 판단할 수 있도록 하였다. 기타를 선택하는 과정은 com 함수에 구현하였으며, 해당 기타들이 연주할 수 있는 곡의 여부를 판단하는 과정은 check 함수에 구현하였다. 코드 import java.util.*; import jav..
문제 - 정수를 저장하는 덱(Deque)을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램 작성 - push_front X : 정수 X를 덱의 앞에 넣기 - push_back X : 정수 X를 덱의 뒤에 넣기 - pop_front : 덱의 가장 앞에 있는 정수를 빼고, 그 수 출력. 만약 덱에 들어있는 정수가 없는 경우 -1 출력 - pop_back : 덱의 가장 뒤에 있는 정수를 빼고, 그 수 출력. 만약 덱에 들어있는 정수가 없는 경우 -1 출력 - size : 덱에 들어있는 정수의 개수 출력 - empty : 덱이 비어있으면 1, 아니면 0 출력 - front : 덱의 가장 앞에 있는 정수 출력. 만약 덱에 들어있는 정수가 없는 경우 -1 출력 - back : 덱의 가장 뒤에 있는 정수 출..
문제 - 정수를 저장하는 큐을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램 작성 - push X : 정수 X를 큐에 넣기 - pop : 스택에서 가장 앞에 있는 정수를 빼고, 그 수 출력. 만약 큐에 들어있는 정수가 없는 경우 -1 출력 - size : 큐에 들어있는 정수의 개수 출력 - empty : 큐가 비어있으면 1, 아니면 0 출력 - front : 큐의 가장 앞에 있는 정수 출력. 만약 큐에 들어있는 정수가 없는 경우 -1 출력 - back : 큐의 가장 뒤에 있는 정수 출력. 만약 큐에 들어있는 정수가 없는 경우 -1 출력 해결방법 이 문제를 해결할 때에는 자바 내의 ArrayDeque 클래스를 이용하여 문제를 해결하였다. push X (add(x)), pop (poll()), ..
문제 - 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램 작성 - push X : 정수 X를 스택에 넣기 - pop : 스택에서 가장 위에 있는 정수를 빼고, 그 수 출력. 만약 스택에 들어있는 정수가 없는 경우 -1 출력 - size : 스택에 들어있는 정수의 개수 출력 - empty : 스택이 비어있으면 1, 아니면 0 출력 - top : 스택의 가장 위에 있는 정수 출력. 만약 스택에 들어있는 정수가 없는 경우 -1 출력 해결방법 이번에 이 문제를 해결할 때에는 자바 내의 stack 클래스를 이용하여 문제를 해결하였다. push X (push(x)), pop (pop()), size(size()), empty(isEmpty()), top(peek()) 메소드를 이용하..
문제 - 정수 하나가 적혀있는 숫자 카드 N장을 가지고 있음 - 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 몇 개 가지고 있는지 구하기 해결방법 처음에는 10,000,000 * 2 + 1 (-10,000,000 ~ 10,000,000) 만큼 2차원 배열로 만들어 해당 숫자가 입력되면 음수일 때에는 절대값 취해서 해당 배열에 카운팅해주고, 양수도 같은 방식으로 해당하는 수의 배열 자리에 카운팅 해줄 수 있도록 코드를 작성하였는데 메모리 초과가 발생하였다. 더보기 import java.io.*; import java.util.*; class Main{ public static void main(String[] args) throws Exception { BufferedReader br = ne..
문제 - 가입한 사람들의 나이와 이름이 가입한 순서대로 주어짐 - 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬 해결방법 Comparable 인터페이스를 상속받아 compareTo 메소드를 Override하여 비교할 수 있도록하여 정렬하였다. age와 name을 모두 담을 수 있는 Person 클래스를 만들어 compareTo 메소드를 Override하여 나이 순으로 비교할 수 있도록 하였다. 그 후 입력받은 사람들의 데이터를 Arrays.sort()를 이용하여 정렬한 뒤 출력하였다. 코드 import java.io.*; import java.util.*; class Main{ public static class Person implements Comparab..
문제 - 재현이와 재민이는 장부 관리 중 - 재현이는 재민이를 도와 돈을 관리하는데, 항상 정신없는 재현이는 돈을 실수로 잘못 부름 - 재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지움 - 재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 구함 - 수는 0에서 1,000,000 사이의 값을 가짐 해결방법 stack을 이용하여 재현이가 수를 부를 때마다 stack에 집어넣고, 재현이가 0을 부른다면 가장 최근에 넣었던 값을 pop()시켜 꺼내줄 수 있도록 한다. 모든 수를 다 stack에 넣었다면 stack 안에 있는 수들의 합을 구하면 된다. 코드 import java.io.*; import java.util.*; class Main { public static v..
문제 - 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 배정 - 호텔 정문은 일층 엘리베이터 바로 앞에 있음 - 정문에서 엘리베이터까지의 거리는 무시 - 엘리베이터는 건물의 가장 왼쪽에 위치 - 모든 인접한 두 방 사이의 거리는 같은 거리라고 가정 - 호텔의 정면 쪽에만 방이 있다고 가정 해결방법 주어진 손님을 방에 배치하기 위해서는 그 손님이 몇 층, 몇 번째 방에 묵어야하는지를 구해야 한다. 가장 가까운 위치부터 배치를 하려면 각 층의 1호부터 손님을 배치해야 한다. 1호부터 각 층별로 손님을 배치해야 하므로 주어진 N번째 방을 찾기 위해서는 H인 층수로 나누어 계산을 해줄 수 있어야 한다. 말로 풀어서 쓰면 헷갈릴 수도 있겠지만, 코드를 보면 바로 이해가 될 것이다. 코드 import jav..