soo 문제집 그리디 easy 문제 중 68문제를 풀었고, 그중 힌트를 참고한 문제 및 정리하기 위해 해당 글을 작성합니다.
| 문제번호 | 제목 | 난이도 |
|---|---|---|
| 5545번 | 최고의 피자 | 실버 3 |
| 11508번 | 2+1 세일 | 실버 4 |
| 14247번 | 나무 자르기 | 실버 2 |
| 2138번 | 전구와 스위치 | 골드 4 |
| 2785번 | 체인 | 실버 1 |
| 20300번 | 서강근육맨 | 실버 3 |
| 1080번 | 행렬 | 실버 1 |
| 1105번 | 팔 | 실버 1 |
| 16112번 | 5차 전직 | 실버 2 |
| 20365번 | 블로그2 | 실버 3 |
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int aPrice = Integer.parseInt(st.nextToken());
int bPrice = Integer.parseInt(st.nextToken());
int aCal = Integer.parseInt(br.readLine());
Integer[] bcals = new Integer[n];
for (int i = 0; i < n; i++) {
bcals[i] = Integer.parseInt(br.readLine());
}
int allCal = aCal;
int allPrice = aPrice;
int ans = allCal / allPrice;
Arrays.sort(bcals, Collections.reverseOrder());
for (int i = 0; i < n; i++) {
if(ans <= (allCal+bcals[i])/(allPrice+bPrice)){
allPrice += bPrice;
allCal += bcals[i];
ans = allCal / allPrice;
}
}
bw.write(ans + "");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
Integer[] arr = new Integer[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr, Collections.reverseOrder());
int ans = 0;
for (int i = 0; i < n; i++) {
if(i%3 == 2){
continue;
}
ans += arr[i];
}
bw.write(ans+"");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
class Tree{
int nowHeight;
int growth;
public Tree(int nowHeight, int growth){
this.nowHeight = nowHeight;
this.growth = growth;
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
Tree[] tree = new Tree[n];
int[] tmp1 = new int[n];
int[] tmp2 = new int[n];
for (int i = 0; i < n; i++) {
tmp1[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
tmp2[i] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < n; i++) {
tree[i] = new Tree(tmp1[i], tmp2[i]);
}
Arrays.sort(tree, Comparator.comparingInt(o -> o.growth));
long ans = 0;
for (int i = 0; i < n; i++) {
ans += tree[i].nowHeight + ((long) i * tree[i].growth);
}
bw.write(ans+"");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
String[] input = br.readLine().split("");
int[] before1 = new int[n];
int[] before2 = new int[n];
int[] after = new int[n];
for (int i = 0; i < n; i++) {
int tmp = Integer.parseInt(input[i]);
before1[i] = tmp;
before2[i] = tmp;
}
input = br.readLine().split("");
for (int i = 0; i < n; i++) {
after[i] = Integer.parseInt(input[i]);
}
int count1 = 1;
int count2 = 0;
before1[0] = 1-before1[0];
before1[1] = 1-before1[1];
for (int i = 0; i < n-1; i++) {
if(before1[i] != after[i]) {
count1++;
before1[i] = 1 - before1[i];
before1[i + 1] = 1 - before1[i + 1];
if (i != n - 2) {
before1[i + 2] = 1 - before1[i + 2];
}
}
}
if(before1[n-1] != after[n-1]){
count1 = -1;
}
for (int i = 0; i < n-1; i++) {
if(before2[i] != after[i]) {
count2++;
before2[i] = 1 - before2[i];
before2[i + 1] = 1 - before2[i + 1];
if (i != n - 2) {
before2[i + 2] = 1 - before2[i + 2];
}
}
}
if(before2[n-1] != after[n-1]){
count2 = -1;
}
if(count1 == -1){
bw.write(count2+"");
}else if(count2 == -1){
bw.write(count1+"");
}else{
bw.write(Math.min(count1, count2)+"");
}
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
List<Integer> arr = new ArrayList<>();
for (int i = 0; i < n; i++) {
arr.add(Integer.parseInt(st.nextToken()));
}
Collections.sort(arr);
int count = 0;
while(true){
if(arr.size() <= 1){
break;
}
arr.set(0, arr.get(0)-1);
arr.remove(arr.size() - 1);
if(arr.get(0) == 0){
arr.remove(0);
}
count++;
}
bw.write(count+"");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
long[] arr = new long[n];
for (int i = 0; i < n; i++) {
arr[i] = Long.parseLong(st.nextToken());
}
Arrays.sort(arr);
long ans = 0;
if(n % 2 == 1){
ans = arr[n-1];
for (int i = 0; i < (n-1) / 2; i++) {
ans = Math.max(ans, arr[i] + arr[n-2-i]);
}
}else{
for (int i = 0; i < n/2; i++) {
ans = Math.max(ans, arr[i] + arr[n-1-i]);
}
}
bw.write(ans+"");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] arr1 = new int[n][m];
int[][] arr2 = new int[n][m];
for (int i = 0; i < n; i++) {
String[] input = br.readLine().split("");
for (int j = 0; j < m; j++) {
arr1[i][j] = Integer.parseInt(input[j]);
}
}
for (int i = 0; i < n; i++) {
String[] input = br.readLine().split("");
for (int j = 0; j < m; j++) {
arr2[i][j] = Integer.parseInt(input[j]);
}
}
boolean isOk = true;
int count = 0;
for (int i = 0; i < n-2; i++) {
for (int j = 0; j < m-2; j++) {
if(arr1[i][j] != arr2[i][j]){
count++;
for (int k = i; k < i+3; k++) {
for (int l = j; l < j+3; l++) {
if(arr1[k][l] == 1){
arr1[k][l] = 0;
}else{
arr1[k][l] = 1;
}
}
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if(arr1[i][j] != arr2[i][j]){
isOk = false;
}
}
}
if(!isOk){
bw.write("-1");
}else{
bw.write(count+"");
}
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
String l = st.nextToken();
String r = st.nextToken();
int ans = 0;
if(l.length() == r.length()){
for (int i = 0; i < l.length(); i++) {
if(l.charAt(i) != r.charAt(i)){
break;
}
if(l.charAt(i) == '8'){
ans++;
}
}
}
bw.write(ans+"");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
long ans = 0;
int stone = 1;
for (int i = 1; i < n; i++) {
if(stone < k){
ans += (long) arr[i] * stone;
stone++;
}else{
ans += (long) arr[i] * stone;
}
}
bw.write(ans+"");
br.close();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
String s = br.readLine();
int blue = 0;
int red = 0;
char last;
if(s.charAt(0) == 'B'){
blue++;
last = 'B';
}else{
red++;
last = 'R';
}
for (int i = 1; i < n; i++) {
if(s.charAt(i) == 'R' && last == 'B'){
red++;
last = 'R';
}else if(s.charAt(i) == 'B' && last == 'R'){
blue++;
last = 'B';
}
}
int count = Math.min(red, blue);
bw.write(count+1+"");
br.close();
bw.close();
}
}