목록알고리즘(백준) (45)
IT 기획의 길
문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다. 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000) 출력 상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정..
문제: 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다. 예를 들어 S=0001100 일 때, 전체를 뒤집으면 1110011이 된다. 4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 2번 만에 모두 같은 숫자로 만들 수 있다. 하지만, 처음부터 4번째 문자부터 5번째 문자까지 문자를 뒤집으면 한 번에 0000000이 되어서 1번 만에 모두 같은 숫자로 만들 수 있다. 문자열 S가 주어졌을 때, 다솜이가 해야하는 행동의 최소 횟수를 출력하시오. 입력: 첫째 줄에 문자..
문제: N명의 사람들은 매일 아침 한 줄로 선다. 이 사람들은 자리를 마음대로 서지 못하고 오민식의 지시대로 선다. 어느 날 사람들은 오민식이 사람들이 줄 서는 위치를 기록해 놓는다는 것을 알았다. 그리고 아침에 자기가 기록해 놓은 것과 사람들이 줄을 선 위치가 맞는지 확인한다. 사람들은 자기보다 큰 사람이 왼쪽에 몇 명 있었는지만을 기억한다. N명의 사람이 있고, 사람들의 키는 1부터 N까지 모두 다르다. 각 사람들이 기억하는 정보가 주어질 때, 줄을 어떻게 서야 하는지 출력하는 프로그램을 작성하시오. 입력: 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보..
알고리즘 설계 1. 나이와 이름을 갖는 Person 객체를 만든다 2. Comparator를 이용하여 Person 객체의 데이터를 나이 오름차순으로 정렬한다 3. 나이가 같으면 가입한 순으로 정렬하라는데 이 과정은 필요없다 추가적인 정렬과정을 안가쳐도 자연스럽게 입력한 데이터 순서대로 데이터가 저장이 되기 때문이다 import java.util.*; class Person { int age; String name; public Person(int age,String name){ this.age=age; this.name=name; } public String toString() { return age+" "+name; } } public class 나이순정렬 { public static void main..
알고리즘 설계 1. A배열을 오름차순해서 정렬하고 2. B배열을 내림차순으로 정렬해서 3. A배열의 가장 큰값과 B배열의 가장 작은값을 곱하고 A배열의 그 다음 큰값과 B배열의 그 다음 작은값을 곱하는식으로 계산을하면 S는 최솟값이 된다 import java.util.*; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); int N=scan.nextInt(); int sum=0; ArrayList A=new ArrayList(); ArrayList B=new ArrayList(); for(int i=0;i
알고리즘 설계 1.x좌표 y좌표니까 이차원 배열로 접근한다 2. 정렬 기준이 (1) x좌표로 오름차순 정렬 (2) x좌표가 같으면 y좌표 오름차순 정렬 2개이므로 comparator를 활용한다 import java.util.Scanner; import java.util.*; import java.util.Arrays; public class 좌표정렬하기 { public static void main(String[] args) { Scanner scan=new Scanner(System.in); int num=scan.nextInt(); int [][] pos=new int[num][2]; for(int i=0;i
알고리즘 설계: 1. 같은 단어가 여러 번 입력된 경우 한번만 출력되게 하려면 중복을 허용하지않는 set을 사용한다 2. 출력을 할때 길이 순으로 오름차순 정렬을 한다 3. 만약 길이가 같은 문자라면 사전 순으로 출력한다 import java.util.*; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); int n=scan.nextInt(); HashSet str1=new HashSet(); for(int i=0;is2.length()) //문자 길이로 정렬 return 1; else if(s1.length()
알고리즘 설계: 1. 먼저 사람의 수를 입력받는다. 2. 각 사람의 인출 시간과 각 사람의 앞사람의 인출시간까지 고려한 인출시간을 구하는 배열을 정의한다 3. 적게 걸리는 사람부터 줄 서는게 각 사람의 앞사람의 인출시간까지 고려한 인출시간을 최소로 만든다 4. 각 사람의 인출시간을 입력으로 받고 그 값을 배열에 담아 오름차순으로 정렬한뒤 그 값에 따라 각 사람의 앞사람의 인출시간까지 고려한 총 인출시간을 구한다 import java.util.*; public class ATM { public static void main(String[] args) { Scanner scan=new Scanner(System.in); int n=scan.nextInt(); int time[]=new int[n]; //각 ..