Baekjoon

·Baekjoon
문제       풀이 핵심은 이분 탐색을 이용하여 푼다는 것이다. 찾고자 하는 수 중 가장 앞의 인덱스를 찾아야 하므로 기존 이분 탐색 로직에 아래 코드를 추가한다.if (arr[mid] == x) { answer = mid; // x를 찾았다면 위치를 업데이트 rt = mid - 1; // 더 왼쪽에 같은 값이 존재하는지 확인하기 위해 오른쪽 경계 줄이기}     코드package baekjoon._20551;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import..
·Baekjoon
문제     풀이패킷이 먼저 들어온 것이 먼저 처리되므로, FIFO(First In First Out)의 자료구조인 큐를 사용하면 된다. 입력은 while(true)로 계속 받는다. 입력 받은 수가 -1 이라면 while문을 빠져나온다. 입력 받은 수가 양의 정수이고, 큐의 크기가 버퍼 크기보다 작다면, 큐에 해당 수를 넣는다.입력 받은 수가 0이라면 큐에서 값 하나를 뺀다.입력 받은 수가 양수이지만 큐의 크기가 버퍼 크기와 같거나 크면, 아무것도 하지 않는다. 반복문을 빠져나와서, 큐가 비었는지 확인하여 비었다면 empty를 StringBuilder에 추가한다.큐가 비어있지 않다면, 반복문이 빠져 나온 시점에 큐의 크기를 변수 하나에 저장해 둔다. (그렇게 하지 않으면, 큐에서 수를 하나 꺼낼 때 마다..
·Baekjoon
문제   풀이큐를 사용하는 문제이다. 다만 큐에 저장을 할 때, 배열 형태로 저장했다. 큐의 [0]은 인덱스 번호, 큐의 [1]은 필요한 피자의 양이다.그래서 큐를 LinkedList queue 로 선언했다. 핵심 로직은 다음과 같다. 큐가 빌 때 까지 반복한다.시간을 1 증가시킨다.큐의 가장 첫 번째 요소를 가져온다.요소[0]은 고유한 사람의 인덱스 번호, 요소[1]은 필요한 피자의 양이다.요소[1]-1 이 0이라면 정답 배열의 요소[0] 값에 시간값을 넣는다.그렇지 않다면 해당 요소[0]은 그대로, 요소[1]은 -1 한 값(피자를 하나 먹었으므로!) 을 큐의 맨 뒤에 넣는다.   코드package baekjoon._15235;import java.io.BufferedReader;import java...
·Baekjoon
문제     풀이자료구조는 큐를 사용하는 문제이다. 나는 back 때문에 Queue가 아닌 LinkedList로 문제를 풀었다. Queue는 FIFO(First In First Out) 데이터 구조의 인터페이스로, Java Collection Framework의 일부이다. 반면 LinkedList는 구체적인 클래스로, List와 Deque 인터페이스를 모두 구현한다. 여기서 Deque는 양방향 큐를 의미하며, Queue 인터페이스를 확장하고 있다. Queue 인터페이스의 주요 메소드는 다음과 같다.boolean add(E e): 큐에 요소를 추가한다. 큐가 꽉 찼을 경우 예외를 던진다.E remove(): 큐에서 요소를 제거하고 반환한다. 큐가 비어있을 경우 예외를 던진다.E poll(): 큐에서 요소를..
·Baekjoon
풀이스택을 하나 생성한 후 문자열 길이만큼 반복한다.')'를 만난 경우스택이 비어있거나, 스택의 제일 상단값이 ')'이면 짝 괄호가 없다는 뜻이므로 '(' 괄호가 필요하다. 따라서 count를 1 증가시킨다.그렇지 않다면 (스택이 비어있지 않고, 스택의 제일 상단값이 '(' 이면) 짝 괄호가 있다는 뜻이므로 스택을 pop 한다.'('를 만난 경우무조건 push 한다.  반복문이 끝난 후 '('만 남아있거나 스택이 비어있을 것이다.따라서 마지막에 스택의 크기(size)만큼 count에 더해준다.     코드package baekjoon._11899;import java.io.BufferedReader;import java.io.BufferedW..
·Baekjoon
설명민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다. 폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.   입력첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다.   출력첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.   예시 입력1XXXXXX   예시 출력1AAAABB    예시 입력2XX.XX    예시 출력2BB.BB     풀이로직은 단순하다.사전순으로 가장 ..
·Baekjoon
설명정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.2를 곱한다.1을 수의 가장 오른쪽에 추가한다.  A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.   입력첫째 줄에 A, B (1 ≤ A    출력A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.   예시 입력12 162   예시 출력15    예시 입력24 42    예시 출력2-1    예시 입력3100 40021   예시 출력35    풀이핵심은 B에서 A를 만들어 낸다는 것이다.B가 A보다 클 때 까지만 반복한다. B의 일의 자리(마지막 숫자)가..
·Baekjoon
설명춘향이는 편의점 카운터에서 일한다.손님이 2원짜리와 5원짜리로만 거스름돈을 달라고 한다. 2원짜리 동전과 5원짜리 동전은 무한정 많이 가지고 있다. 동전의 개수가 최소가 되도록 거슬러 주어야 한다. 거스름돈이 n인 경우, 최소 동전의 개수가 몇 개인지 알려주는 프로그램을 작성하시오.예를 들어, 거스름돈이 15원이면 5원짜리 3개를, 거스름돈이 14원이면 5원짜리 2개와 2원짜리 2개로 총 4개를, 거스름돈이 13원이면 5원짜리 1개와 2원짜리 4개로 총 5개를 주어야 동전의 개수가 최소가 된다.   입력첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다.   출력거스름돈 동전의 최소 개수를 출력한다. 만약 거슬러 줄 수 없으면 -1을 출력한다.  ..
coding-orange
'Baekjoon' 카테고리의 글 목록