전체 글505 [JAVA] Queue 인터페이스 구현하기 (3) ArrayDeque Queue라는 인터페이스를 구현하는 방식 중 ArrayDeque에 대해서 알아본다. add - offer이 완전히 동일한 것을 제외하면 나머지는 queue 추상메서드의 의도대로 구현되었다. ArrayDeque ArrayDeque은 내부적으로 다음의 변수를 사용한다. 이 변수들은 transient를 사용해서 직렬화되지 않는다. Object[] elements deque의 요소가 저장되는 배열. 항상 2의 거듭제곱이 배열의 길이가 된다. deque요소를 보유하지 않는 모든 배열 셀은 항상 null이다. int head deque의 head 요소의 "인덱스". deque가 비어있는 경우 tail과 같은 임의의 숫자가 저장된다. int tail deque의 다음요소가 추가될 "인덱스". private int M.. 기록/JAVA 2023. 7. 11. [JAVA] Queue 인터페이스 구현하기 (2) LinkedList Queue라는 인터페이스를 구현하는 방식 중 LinkedList에 대해서 알아본다. LinkedList LinkedList는 내부적으로 다음의 변수를 사용한다. 이 변수들은 transient를 사용해서 직렬화되지 않는다. int size 크기 Node first 첫번째 노드를 가리킨다. Node last 마지막 노드를 가리킨다. modCount는 LinkedList가 상속받은 AbstractSequentialList 내부적으로 쓰이는 변수다. 객체의 구조적 변경 횟수를 추적하기 위해 사용된다. Node LinkedList에서 사용하는 Node 클래스다. 한 노드에는 아이템과 이전 노드 주소, 다음 노드 주소를 저장한다. private static class Node { E item; Node next; .. 기록/JAVA 2023. 7. 11. [JAVA] Queue 인터페이스 구현하기 (1) Queue Queue라는 인터페이스를 구현하는 방식은 일반적으로 ArrayDeque, LinkedList 두 가지가 있다. 이 두 가지 클래스가 Queue의 추상메서드를 어떤 식으로 수행하는지 비교해보고자 한다. (java 1.8 기준) 그 이전에, 큐가 어떤 것인지부터 짚어본다. Queue란? 큐는 데이터를 일시적으로 저장하고 처리하는 자료구조다. 데이터를 먼저 입력한 순서대로 저장하고, 먼저 입력된 데이터가 먼저 처리되는 FIFO(First-In-First-Out)원칙을 따른다. 은행 창구, 버스정류장 등 일반적인 일상생활에서의 대기줄을 생각하면 쉽다. Queue 추상 메서드 목록 Queue 인터페이스에는 다음과 같은 추상 메서드가 있다. 이 메서드를 잘 기억해서, ArrayDeque이나 LinkedList에서.. 기록/JAVA 2023. 7. 10. [BOJ] 1343 폴리오미노 - JAVA 1. 문제 1343번: 폴리오미노 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다. www.acmicpc.net 민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB 이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다. 폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오. 첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다. 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다. 2. 풀이 1. 입력받은 보드판을 char배열로 만든다. 2. 보드판을 한 칸씩 탐색한다. 2-1. .. 코딩테스트/BOJ 2023. 7. 10. [BOJ] 15990 1,2,3 더하기 5 - JAVA 1. 문제 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 3가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 단, 같은 수를 두 번 이상 연속해서 사용하면 안 된다. 1+2+1 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 2. 풀이 dp 채우기 2차원 배열을 사용했다. [숫자][해당 숫자를 만들기 위해 마지막으로 더한 숫자]라고 보면 된다. n=1일 때 1 n=2일 때 2 n=3일 때 1+2, 2+1, 3 이 세 가지 .. 코딩테스트/BOJ 2023. 7. 9. [BOJ] 16194 카드 구매하기 2 - JAVA 1. 문제 16194번: 카드 구매하기 2 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 요즘 민규네 동네에서는 스타트링크에서 만든 PS카드를 모으는 것이 유행이다. PS카드는 PS(Problem Solving)분야에서 유명한 사람들의 아이디와 얼굴이 적혀있는 카드이다. 각각의 카드에는 등급을 나타내는 색이 칠해져 있고, 다음과 같이 8가지가 있다. 전설카드 레드카드 오렌지카드 퍼플카드 블루카드 청록카드 그린카드 그레이카드 카드는 카드팩의 형태로만 구매할 수 있고, 카드팩의 종류는 카드 1개가 포함된 카드팩, 카드 2개가 포함된 카드팩, ..... 코딩테스트/BOJ 2023. 7. 8. [BOJ] 10826 피보나치 수 4 - JAVA 1. 문제 10826번: 피보나치 수 4 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이.. 코딩테스트/BOJ 2023. 7. 7. [BOJ] 1043 거짓말 - JAVA 1. 문제 1043번: 거짓말 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 www.acmicpc.net 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 과장해서 말한다. 당연히 과장해서 이야기하는 것이 훨씬 더 재미있기 때문에, 되도록이면 과장해서 이야기하려고 한다. 하지만, 지민이는 거짓말쟁이로 알려지기는 싫어한다. 문제는 몇몇 사람들은 그 이야기의 진실을 안다는 것이다. 따라서 이런 사람들이 파티에 왔을 때는, 지민이는 진.. 코딩테스트/BOJ 2023. 7. 4. [BOJ] 2011 암호코드 - JAVA 1. 문제 2011번: 암호코드 나올 수 있는 해석의 가짓수를 구하시오. 정답이 매우 클 수 있으므로, 1000000으로 나눈 나머지를 출력한다. 암호가 잘못되어 암호를 해석할 수 없는 경우에는 0을 출력한다. www.acmicpc.net 상근이와 선영이가 다른 사람들이 남매간의 대화를 듣는 것을 방지하기 위해서 대화를 서로 암호화 하기로 했다. 그래서 다음과 같은 대화를 했다. 상근: 그냥 간단히 암호화 하자. A를 1이라고 하고, B는 2로, 그리고 Z는 26으로 하는거야. 선영: 그럼 안돼. 만약, "BEAN"을 암호화하면 25114가 나오는데, 이걸 다시 글자로 바꾸는 방법은 여러 가지가 있어. 상근: 그렇네. 25114를 다시 영어로 바꾸면, "BEAAD", "YAAD", "YAN", "YKD".. 코딩테스트/BOJ 2023. 7. 3. [BOJ] 1516 게임 개발 - JAVA 1. 문제 1516번: 게임 개발 첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부 www.acmicpc.net 숌 회사에서 이번에 새로운 전략 시뮬레이션 게임 세준 크래프트를 개발하기로 하였다. 핵심적인 부분은 개발이 끝난 상태고, 종족별 균형과 전체 게임 시간 등을 조절하는 부분만 남아 있었다. 게임 플레이에 들어가는 시간은 상황에 따라 다를 수 있기 때문에, 모든 건물을 짓는데 걸리는 최소의 시간을 이용하여 근사하기로 하였다. 물론, 어떤 건물을 짓기 위해서 다른 건물을 먼저 지어야 할 수도 있기 때문에 문제가 단순하지만은 않을 수도 있다. 예를.. 코딩테스트/BOJ 2023. 7. 2. [BOJ] 13301 타일 장식물 - JAVA 1. 문제 13301번: 타일 장식물 대구 달성공원에 놀러 온 지수는 최근에 새로 만든 타일 장식물을 보게 되었다. 타일 장식물은 정사각형 타일을 붙여 만든 형태였는데, 한 변이 1인 정사각형 타일부터 시작하여 마치 앵무조개 www.acmicpc.net 대구 달성공원에 놀러 온 지수는 최근에 새로 만든 타일 장식물을 보게 되었다. 타일 장식물은 정사각형 타일을 붙여 만든 형태였는데, 한 변이 1인 정사각형 타일부터 시작하여 마치 앵무조개의 나선 모양처럼 점점 큰 타일을 붙인 형태였다. 타일 장식물의 일부를 그리면 다음과 같다. 그림에서 타일에 적힌 수는 각 타일의 한 변의 길이를 나타낸다. 타일 장식물을 구성하는 정사각형 타일 한 변의 길이를 안쪽 타일부터 시작하여 차례로 적으면 다음과 같다. 1, 1,.. 코딩테스트/BOJ 2023. 7. 1. [BOJ] 5557 1학년 - JAVA 1. 문제 5557번: 1학년상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀www.acmicpc.net상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀고 있다. 예를 들어, "8 3 2 4 8 7 2 4 0 8 8"에서 등식 "8+3-2-4+8-7-2-4-0+8=8"을 만들 수 있다. 상근이는 올바른 등식을 만들려고 한다. 상근이는 아직 학교에서 음수를 배우지 않았고, 20을 넘는 수는 모른다. .. 코딩테스트/BOJ 2023. 6. 30. 이전 1 2 3 4 5 6 7 ··· 43 다음