๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ?
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฌ ์ํ์์ ๋ณด๋ ์ ํ์ง ์ค ์ต์ ์ ์ ํ์ง๊ฐ ์ ์ฒด ์ ํ์ง ์ค ์ต์ ์ ์ ํ์ง๋ผ๊ณ ๊ฐ์ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋จ, ๋ชจ๋ ๋ฌธ์ ์ ๋ฌด์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ์ ์ฒด ์ ํ์ง์์ ๋๊ฐ์ด ์ ์ฉ๋๋ ์ง ๊ผญ ํ์ธํด์ผ ํ๋ค.
๊ทธ๋์ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ณ ๋ คํ๊ธฐ ์ํ 3๊ฐ์ง ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค.
1. ํด ์ ํ : ํ์ฌ ์ํ์์ ์ต์ ์ ํด๋ฅผ ์ ํํ๋ค.
2. ์ ์ ์ฑ ๊ฒ์ฌ : ์ ํํ ํด๊ฐ ์ ์ฒด ๋ฌธ์ ์ ์ฝ ์กฐ๊ฑด์ ๋ฒ์ด๋๋ ์ง ํ์ธํ๋ค.
3. ํด ๊ฒ์ฌ : ์ ํํ ํด ์งํฉ์ด ์ ์ฒด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ์ง ํ์ธํ๋ค. ๋ชปํ๋ค๋ฉด, ๋ค์ ํด ์ ํ์ผ๋ก ์ด๋ํ๋ค.
์์ ๋ฌธ์ ๋ฅผ ํตํด ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋ ์ ์๋ ์ง ์์๋ณด์.

๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ 1
11047๋ฒ: ๋์ 0
์ฒซ์งธ ์ค์ N๊ณผ K๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๋์ ์ ๊ฐ์น Ai๊ฐ ์ค๋ฆ์ฐจ์์ผ๋ก ์ฃผ์ด์ง๋ค. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2์ธ ๊ฒฝ์ฐ์ Ai๋ Ai-1์ ๋ฐฐ์)
www.acmicpc.net
๊ทธ๋ฆฌ๋๋ฅผ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํด ๋ณผ ์ ์๋ ๋ฐฑ์ค 11047๋ฒ ๋ฌธ์ ์ด๋ค.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] A = new int[n];
for(int i=0; i<n; i++) {
A[i] = sc.nextInt();
}
int count = 0;
for(int i=n-1; i>=0; i--) {
if (A[i] <= k) {
count += (k / A[i]);
k = k % A[i];
}
}
System.out.println(count);
}
}
๋์ ์ ์ต์๋ก ์ฌ์ฉํ์ฌ, K๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ๊ฐ์ฅ ๊ฐ๊ฒฉ์ด ํฐ ๋์ ๋ถํฐ ์ฌ์ฉํด์ผ ํ๋ค.
์ฆ, ํ์ฌ ๊ฐ์ฅ ํฐ ๋์ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์ ์ฒด ๋ต์ ์์ด์ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ์ด ๋๋ฏ๋ก, ๊ทธ๋ฆฌ๋๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๊ฐ์ฅ ์ ํ์ ์ธ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ์ ๊ฐ๋จํ์ง๋ง, ๋์ด๋๊ฐ ์ฌ๋ผ๊ฐ๋ฉด ๋์ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
๋ค์ ๋ฌธ์ ๋ฅผ ํ ๋ฒ ์ดํด๋ณด์.
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ 2
1715๋ฒ: ์นด๋ ์ ๋ ฌํ๊ธฐ
์ ๋ ฌ๋ ๋ ๋ฌถ์์ ์ซ์ ์นด๋๊ฐ ์๋ค๊ณ ํ์. ๊ฐ ๋ฌถ์์ ์นด๋์ ์๋ฅผ A, B๋ผ ํ๋ฉด ๋ณดํต ๋ ๋ฌถ์์ ํฉ์ณ์ ํ๋๋ก ๋ง๋๋ ๋ฐ์๋ A+B ๋ฒ์ ๋น๊ต๋ฅผ ํด์ผ ํ๋ค. ์ด๋ฅผํ ๋ฉด, 20์ฅ์ ์ซ์ ์นด๋ ๋ฌถ์๊ณผ 30์ฅ
www.acmicpc.net
๋ฐฑ์ค 1715๋ฒ ๋ฌธ์ ๋ ๊ทธ๋ฆฌ๋๋ฅผ ์ ์ฉ์ํค๊ธฐ ์ํด ์ฐ์ ์์ ํ๋ฅผ ๋์ ํ๋ค.
์ด์ฐ๋ณด๋ฉด, ์ฐ์ ์์๋ฅผ ๋์ ํ๋ค๋ ๊ฒ ์์ฒด๊ฐ ํ์ฌ ์ํ์ ๋ํ ์ต์ ์ ์ ํ์ ์ ์ฒด ๋ต์ ์ํ ์ ํ์ผ๋ก ์ฌ์ฉํ๋ค๋ ๊ฒ์ผ๋ก ์ดํดํ ์ ์๊ธฐ๋ ํ๋ค.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int i=0; i<n; i++) {
int data = sc.nextInt();
pq.add(data);
}
int data1 = 0;
int data2 = 0;
int sum = 0;
while(pq.size() != 1) {
data1 = pq.remove();
data2 = pq.remove();
sum += data1 + data2;
pq.add(data1 + data2);
}
System.out.println(sum);
}
}
์นด๋ ๋ฌถ์์ ์ด๋ป๊ฒ ๋ฌถ์ด์ผ ์ต์ํ์ ๋น๊ต๋ฅผ ํ ์ ์๋ ์ง ๋ฌป๋ ๋ฌธ์ ์ด๋ค.
์ฐ์ ์์๋ฅผ ์ฌ์ฉํ ์ค ์๋ค๋ฉด, ํฐ์ด๊ฐ ๋์ ๊ฒ์ ๋นํด ์ฌ์ด ํธ์ด๋ค.
์ด ๋ฌธ์ ๋ ์นด๋ ๋ฌถ์์ ๋ฝ๊ณ , ๋ค์ ์ ๋ ฌํ๋ ๊ณผ์ ์ด ์ฌ๋ฌ๋ฒ ๋ฐ๋ณต๋๋ค. ์ด๋ ๊ฒ ์ฝ์ , ์ญ์ , ์ ๋ ฌ์ด ์์ฃผ ์ผ์ด๋ ๋, ์ฐ์ ์์ ํ๋ฅผ ์๊ฐํด ๋ณผ ์ ์๋ค.
- ์ฐ์ ์์ ํ(์ค๋ฆ์ฐจ์)์ ๊ฐ์ ์ฝ์ ํ์ฌ, ๊ฐ์ ๋ฃ์ ๋ ๋ง๋ค ์ ๋ ฌ ์์ผ์ค๋ค.
- ํ์ ํฌ๊ธฐ๊ฐ 1์ด ๋ ๋๊น์ง, ๊ฐ์ ๊บผ๋ด์ด ํฉ์น๋ฉด์ ๋น๊ต ํ์๊ฐ ์ต์๊ฐ ๋ ์ ์๋๋ก ํ๋ค.
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ 3
์ ๋ฌธ์ ๋ณด๋ค ๋ณด๋ค ๋ณต์กํ๊ฒ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ์ด๋ค.
1744๋ฒ: ์ ๋ฌถ๊ธฐ
๊ธธ์ด๊ฐ N์ธ ์์ด์ด ์ฃผ์ด์ก์ ๋, ๊ทธ ์์ด์ ํฉ์ ๊ตฌํ๋ ค๊ณ ํ๋ค. ํ์ง๋ง, ๊ทธ๋ฅ ๊ทธ ์์ด์ ํฉ์ ๋ชจ๋ ๋ํด์ ๊ตฌํ๋ ๊ฒ์ด ์๋๋ผ, ์์ด์ ๋ ์๋ฅผ ๋ฌถ์ผ๋ ค๊ณ ํ๋ค. ์ด๋ค ์๋ฅผ ๋ฌถ์ผ๋ ค๊ณ ํ ๋, ์์น์
www.acmicpc.net
์ฐ์ ์์ ํ๋ฅผ ๋์ ํ ์๊ฐ, ํ์ฌ ์ํฉ์ ์์ด ์ต์ ์ ์ ํ์ ํ๋ค๋ ๊ฒ์ ์ด์ ์ ํ์ธํ๋ค.
์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ์๋ ๋์ผํ ๋ก์ง์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ๋ค๋ง, ๋ง๋ฅ ์ฐ์ ์์๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ค.
๋ถ๊ธฐ๋ฅผ ์์ฑํด์ผ ํ๋ค. ์์, ์์, 1, 0์ธ ๊ฒฝ์ฐ๋ก ๋๋์ด์ผ ํ๋ค.
ํฉ์ด ์ต๋๊ฐ ๋์ค๊ฒ ํ๊ธฐ ์ํด์๋ ์์๋ผ๋ฆฌ๋ ์๋ก ๊ณฑํด์ผ ํ๋ฉฐ, ํ์๋ผ๋ฉด 0์ ๊ณฑํด ์ต๋ํ์ ์์๋ฅผ ์ง์์ฃผ์ด์ผ ํ๋ค.
๊ทธ ๊ณผ์ ์์ ์ฐ์ ์์๊ฐ ์ฌ๋ฌ ๊ฐ ์์ฑ๋ ์ ์๋ค.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
PriorityQueue<Integer> plusPq = new PriorityQueue<>(Collections.reverseOrder());
PriorityQueue<Integer> minusPq = new PriorityQueue<>();
int one = 0;
int zero = 0;
for(int i=0; i<n; i++) {
int data = sc.nextInt();
if (data > 1) {
plusPq.add(data);
} else if (data == 1) {
one++;
} else if (data == 0) {
zero++;
} else {
minusPq.add(data);
}
}
int sum = 0;
while(plusPq.size() > 1) {
int num1 = plusPq.remove();
int num2 = plusPq.remove();
sum += num1 * num2;
}
if (!plusPq.isEmpty()) {
sum += plusPq.remove();
}
while(minusPq.size() > 1) {
int num1 = minusPq.remove();
int num2 = minusPq.remove();
sum += num1 * num2;
}
if (!minusPq.isEmpty()) {
if(zero == 0) {
sum += minusPq.remove();
}
}
sum += one;
System.out.println(sum);
}
}
- ์์ ์ฐ์ ์์ ํ, ์์ ์ฐ์ ์์ ํ, 1์ ๊ฐฏ์, 0์ ๊ฐฏ์๋ฅผ ์ฒดํฌํด์ค๋ค.
- ์์๋ ๊ทธ๋๋ก ๊ณฑํด์ฃผ๊ณ ๋ํด์ฃผ๋ฉด ๋์ง๋ง, ์์๋ -๊ฐ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ฒดํฌํด์ฃผ์ด 0์ ๊ณฑํด์ค๋ค.(๊ทธ๋์ผ ์์๋ฅผ ์ต๋ํ ์์จ ์ ์๊ธฐ ๋๋ฌธ)
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ 4
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ์ ์์ ํ ์ด์ธ์๋, ์๋ฐ์ Comparator๋ฅผ ํตํด์ ์คํ ํ ์ ์๋ค.
๊ฒฐ๊ตญ์๋ ๋ค์ด์ฌ ๋๋ค๋ง ์ต์ ์ ์์๋ฅผ ์ ํด ์ค์ ๋์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
1931๋ฒ: ํ์์ค ๋ฐฐ์
(1,4), (5,7), (8,11), (12,14) ๋ฅผ ์ด์ฉํ ์ ์๋ค.
www.acmicpc.net
๋ฐฑ์ค 1931๋ฒ ๋ฌธ์ ์์ Comparator๋ฅผ ํตํด ๊ทธ๋ฆฌ๋๋ฅผ ์ฌ์ฉํด ๋ณผ ์ ์๋ค.
Comparotor์ ์ข์ ์ ์, ์ํ๋ ๊ธฐ์ค๋๋ก ์ ๋ ฌ์ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ด ๋ง์ด ์๋ฏธํ๋ ๊ฒ์ ์ํ๋ ๊ธฐ์ค๋๋ก ์ต์ ์ ์ ํ์ ํ ์ ์๋ค๋ ๊ฒ.
๋ฌธ์ ๋ฅผ ์ดํด๋ณด๋ฉด, ํ์ฌ ํ์ ์ข ๋ฃ ์๊ฐ์ด ๋น ๋ฅผ ์๋ก ์ข๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ฆ, ์ ๋ ฌ์ ํตํด ์ข ๋ฃ์๊ฐ์ด ๋น ๋ฅธ ์์๋๋ก ๋ ์ ์๋๋ฐ, ์ด ๋ ์ข ๋ฃ์๊ฐ์ด ๊ฐ๋ค๋ฉด, ์์ ํ์ ์๊ฐ์ด ๋น ๋ฅธ ๊ฒ์ด ์ฐ์ ์ผ๋ก ์์ผ ํ๋ค.
์ด๋ฌํ ๊ธฐ์ค์ ํตํด์ ์ ๋ ฌ์ ํ๋ค๋ฉด, ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ฌ ๋๋ง๋ค ์ต์ ์ ์ ํ์ ํ ์ ์๊ณ ,
๋ฐ์ดํฐ ์ ๋ ฅ์ด ์ข ๋ฃ๋์์ ๋, ์ ์ฒด์์ ์ต์ ์ ์ ํ์ด ๋ ๊ฒ์ด๋ค.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] A = new int[n][2];
for(int i=0; i<n; i++) {
A[i][0] = sc.nextInt();
A[i][1] = sc.nextInt();
}
Arrays.sort(A, new Comparator<int[]>() {
@Override
public int compare(int[] S, int[] E) {
if (S[1] == E[1]) {
return S[0] - E[0];
}
return S[1] - E[1];
}
});
int count = 0;
int end = -1;
for(int i=0; i<n; i++) {
if (A[i][0] >= end) {
end = A[i][1];
count++;
}
}
System.out.println(count);
}
}
- sort ์์ Comparator๋ฅผ ์ต๋ช ๊ฐ์ฒด๋ก ์ธ์๋ฅผ ๋ ์ ์๋ค.
- ์ ๋ ฌ ์์ ๋ํดํธ๋ ์ค๋ฆ์ฐจ์์ด๋ค. (๋ฐํ๋๋ ๊ฐ์ด ์์์ธ ๊ฒฝ์ฐ์ ์์๊ฐ swap, ์์์ธ ๊ฒฝ์ฐ swap ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.)
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ 5
๋ฌธ์์ด์์ ๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๋ ์๊ฐํด๋ณด์.
1541๋ฒ: ์์ด๋ฒ๋ฆฐ ๊ดํธ
์ฒซ์งธ ์ค์ ์์ด ์ฃผ์ด์ง๋ค. ์์ ‘0’~‘9’, ‘+’, ๊ทธ๋ฆฌ๊ณ ‘-’๋ง์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ๊ฐ์ฅ ์ฒ์๊ณผ ๋ง์ง๋ง ๋ฌธ์๋ ์ซ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ์ํด์ ๋ ๊ฐ ์ด์์ ์ฐ์ฐ์๊ฐ ๋ํ๋์ง ์๊ณ , 5์๋ฆฌ๋ณด๋ค
www.acmicpc.net
๊ฐ์ฅ ์ต์ ๊ฐ์ ๋ง๋ค๊ธฐ ์ํด์๋ ๊ฐ์ฅ ํฐ ๊ฐ์ ๋นผ์ผ ํ๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด์ ๋ํ๊ธฐ์ ํด๋นํ๋ ๋ถ๋ถ์ ์ ์ผ ๋จผ์ ์ ๋ถ ๋ํด ๋ฒ๋ฆฐ ๋ค, ๊ดํธ๋ฅผ ์น๊ณ ๋นผ๋ฉด ๋๋ ๊ฒ์ด๋ค.
import java.util.*;
import java.io.*;
public class Main {
static int answer;
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
String example = sc.nextLine();
String[] str = example.split("-");
for(int i=0; i< str.length; i++) {
int temp = mySum(str[i]);
if (i == 0) {
answer += temp;
} else {
answer -= temp;
}
}
System.out.println(answer);
}
static int mySum(String a) {
int sum = 0;
String temp[] = a.split("[+]");
for(int i=0; i<temp.length; i++) {
sum += Integer.parseInt(temp[i]);
}
return sum;
}
}
- ์ ์ผ ์ฒ์ -๋ฅผ ๊ธฐ์ค์ผ๋ก splitํด์ฃผ์ด, ํ๋ฒ์ ๋ํ ๊ทธ๋ฃน๋ค์ ์ ํด์ค๋ค.
- ๊ทธ๋ฃน ๋ด์ ์๋ ์๋ค์ ํ ๋ฒ์ ๋ํด์ฃผ๊ธฐ ์ํ ํจ์ mySum์ ๋ง๋ค์ด, ๋ํด์ค๋ค.
- -๋ฅผ ๊ธฐ์ค์ผ๋ก split ํ ๊ฐ ์ค, ์ฒซ ๋ฒ์งธ ๊ทธ๋ฃน์ answer์ ๋ํด์ฃผ๊ณ (์๋ ๋บ ๋์์ด ์๋๋ฏ๋ก), ๋๋จธ์ง๋ ๋นผ์ค๋ค.
Reference
- Do it! ์ฝ๋ฉ ํ ์คํธ - ๊ธฐ์ด ํธ
'๐ Knowledge > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์๊ณ ๋ฆฌ์ฆ] ์ ์๋ก - ์ค์ผ๋ฌ ํผ์ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ (0) | 2023.09.01 |
|---|---|
| [์๊ณ ๋ฆฌ์ฆ] ์ ์๋ก - ์์์ ๊ดํ์ฌ (0) | 2023.08.30 |
| [์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ๋ ๋ฐ์ดํฐ์์์ ํ์, ์ด์ง ํ์ (0) | 2023.08.26 |
| [์๊ณ ๋ฆฌ์ฆ] DFS์ BFS ๋ค๋ฃจ๊ธฐ (0) | 2023.08.25 |
| [์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ(๋ณํฉ, ๊ธฐ์) ์๊ณ ๋ฆฌ์ฆ (3) (0) | 2023.08.18 |