문제 풀이 핵심은 이분 탐색을 이용하여 푼다는 것이다. 찾고자 하는 수 중 가장 앞의 인덱스를 찾아야 하므로 기존 이분 탐색 로직에 아래 코드를 추가한다.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..
백준
문제 풀이큐를 사용하는 문제이다. 다만 큐에 저장을 할 때, 배열 형태로 저장했다. 큐의 [0]은 인덱스 번호, 큐의 [1]은 필요한 피자의 양이다.그래서 큐를 LinkedList queue 로 선언했다. 핵심 로직은 다음과 같다. 큐가 빌 때 까지 반복한다.시간을 1 증가시킨다.큐의 가장 첫 번째 요소를 가져온다.요소[0]은 고유한 사람의 인덱스 번호, 요소[1]은 필요한 피자의 양이다.요소[1]-1 이 0이라면 정답 배열의 요소[0] 값에 시간값을 넣는다.그렇지 않다면 해당 요소[0]은 그대로, 요소[1]은 -1 한 값(피자를 하나 먹었으므로!) 을 큐의 맨 뒤에 넣는다. 코드package baekjoon._15235;import java.io.BufferedReader;import java...
문제 풀이자료구조는 큐를 사용하는 문제이다. 나는 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(): 큐에서 요소를..
풀이스택을 하나 생성한 후 문자열 길이만큼 반복한다.')'를 만난 경우스택이 비어있거나, 스택의 제일 상단값이 ')'이면 짝 괄호가 없다는 뜻이므로 '(' 괄호가 필요하다. 따라서 count를 1 증가시킨다.그렇지 않다면 (스택이 비어있지 않고, 스택의 제일 상단값이 '(' 이면) 짝 괄호가 있다는 뜻이므로 스택을 pop 한다.'('를 만난 경우무조건 push 한다. 반복문이 끝난 후 '('만 남아있거나 스택이 비어있을 것이다.따라서 마지막에 스택의 크기(size)만큼 count에 더해준다. 코드package baekjoon._11899;import java.io.BufferedReader;import java.io.BufferedW..
설명민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다. 폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오. 입력첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다. 출력첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다. 예시 입력1XXXXXX 예시 출력1AAAABB 예시 입력2XX.XX 예시 출력2BB.BB 풀이로직은 단순하다.사전순으로 가장 ..
설명정수 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의 일의 자리(마지막 숫자)가..
설명춘향이는 편의점 카운터에서 일한다.손님이 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을 출력한다. ..
설명언제나 최고만을 지향하는 굴지의 대기업 진영 주식회사가 신규 사원 채용을 실시한다. 인재 선발 시험은 1차 서류심사와 2차 면접시험으로 이루어진다. 최고만을 지향한다는 기업의 이념에 따라 그들은 최고의 인재들만을 사원으로 선발하고 싶어 한다.그래서 진영 주식회사는, 다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 원칙을 세웠다. 즉, 어떤 지원자 A의 성적이 다른 어떤 지원자 B의 성적에 비해 서류 심사 결과와 면접 성적이 모두 떨어진다면 A는 결코 선발되지 않는다.이러한 조건을 만족시키면서, 진영 주식회사가 이번 신규 사원 채용에서 선발할 수 있는 신입사원의 최대 인원수를 구하는 프로그램을 작성하시오. ..