알고리즘

설명      풀이 결정 알고리즘이란 이분 검색을 이용하는 것이다. lt와 rt 사이에 반드시 답이 있다고 보장할 수 있는 문제에만 적용이 가능하다. 답으로서 가능한지 범위를 좁혀 나가면서 최종적으로 답을 결정한다. 좋은 답을 향해 좁혀 나가는 알고리즘이다.  solution 함수 로직은 다음과 같다.정답이 될 변수 answer를 0으로 초기화 한다.lt는 배열의 최댓값이고, rt는 배열의 합이다.배열의 최댓값은 Arrays.stream(arr).max().getAsInt() 로 구한다.배열의 합은 Arrays.stream(arr).sum() 으로 구한다.이분 탐색을 수행한다. lt가 rt보다 작거나 같을 때 반복한다. while (lt 여기서 mid 변수는 DVD 한 장의 용량을 의미한다. mid 변수..
설명      풀이 자료구조는 int형 배열을 사용한다. 로직은 다음과 같다.정답으로 리턴할 데이터는 ArrayList 형으로 생성한다.원본 배열을 깊은 복사한다. clone 메소드를 이용한다. 이 배열을 복사된 배열이라고 하자.복사된 배열을 오름차순 정렬한다. Arrays 클래스의 sort 메소드를 이용한다.반복문을 돌면서 원본 배열과 복사된 배열의 값을 비교한다.값이 다르다면 정답에 add 한다. 이 때 인덱스 값에 +1을 해야 배정받은 번호가 된다. (번호는 1부터 시작이고 인덱스는 0부터 시작이므로)정답 배열을 리턴한다.    코드 package inflearn._6_6;import java.io.BufferedReader;import java.io.BufferedWriter;import java..
설명       풀이 이 문제는 HashMap을 사용하면 O(n)으로 풀 수 있지만, 정렬로도 이 문제를 풀 수 있음을 보여주기 위해 정렬을 사용했다.정렬을 사용하면 O(nlog(n))이 된다. 로직은 다음과 같다.정답 문자열을 "U"로 초기화한다.오름차순 정렬을 한다. java.util.Arrays 클래스의 sort 메소드를 이용한다.0번 인덱스부터 (배열 길이의 - 1) 번 인덱스까지 반복문을 돈다.현재 배열값과 현재 배열값의 다음값이 같다면 중복된 것이므로 "D"를 바로 리턴한다.정답 문자열을 리턴한다.    코드 package inflearn._6_5;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOExcep..
설명 오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요. 입력 첫 번째 줄에 첫 번째 배열의 크기 N(1
·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을 출력한다.  ..
설명 현수는 유명한 강연자이다. N개이 기업에서 강연 요청을 해왔다. 각 기업은 D일 안에 와서 강연을 해 주면 M만큼의 강연료를 주기로 했다. 각 기업이 요청한 D와 M를 바탕으로 가장 많을 돈을 벌 수 있도록 강연 스케쥴을 짜야 한다. 단 강연의 특성상 현수는 하루에 하나의 기업에서만 강연을 할 수 있다. 입력 첫 번째 줄에 자연수 N(1
·Baekjoon
설명언제나 최고만을 지향하는 굴지의 대기업 진영 주식회사가 신규 사원 채용을 실시한다. 인재 선발 시험은 1차 서류심사와 2차 면접시험으로 이루어진다. 최고만을 지향한다는 기업의 이념에 따라 그들은 최고의 인재들만을 사원으로 선발하고 싶어 한다.그래서 진영 주식회사는, 다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 원칙을 세웠다. 즉, 어떤 지원자 A의 성적이 다른 어떤 지원자 B의 성적에 비해 서류 심사 결과와 면접 성적이 모두 떨어진다면 A는 결코 선발되지 않는다.이러한 조건을 만족시키면서, 진영 주식회사가 이번 신규 사원 채용에서 선발할 수 있는 신입사원의 최대 인원수를 구하는 프로그램을 작성하시오. ..
coding-orange
'알고리즘' 태그의 글 목록