[C++, Golang] 2798๋ฒ: ๋ธ๋์ญ
ํด๋น ๊ธ์ ๋ด์ฉ์ ์ต์ ์ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ ๊ธ์ด์ด์ ์ฃผ๊ด์ ์ธ ํ์ด์ ๋๋ค. ๋ ์ข์ ํ์ด๊ฐ ์๋ค๋ฉด ๋๊ธ๋ก ํผ๋๋ฐฑ ๋ถํ๋๋ฆฝ๋๋ค(__)
๋งํฌ
https://www.acmicpc.net/problem/2798
๋ฌธ์ ์ค๋ช
์นด์ง๋ ธ์์ ์ ์ผ ์ธ๊ธฐ ์๋ ๊ฒ์ ๋ธ๋์ญ์ ๊ท์น์ ์๋นํ ์ฝ๋ค. ์นด๋์ ํฉ์ด 21์ ๋์ง ์๋ ํ๋ ๋ด์์, ์นด๋์ ํฉ์ ์ต๋ํ ํฌ๊ฒ ๋ง๋๋ ๊ฒ์์ด๋ค. ๋ธ๋์ญ์ ์นด์ง๋ ธ๋ง๋ค ๋ค์ํ ๊ท์ ์ด ์๋ค.
ํ๊ตญ ์ต๊ณ ์ ๋ธ๋์ญ ๊ณ ์ ๊น์ ์ธ์ ์๋ก์ด ๋ธ๋์ญ ๊ท์น์ ๋ง๋ค์ด ์๊ทผ, ์ฐฝ์์ด์ ๊ฒ์ํ๋ ค๊ณ ํ๋ค.
๊น์ ์ธ ๋ฒ์ ์ ๋ธ๋์ญ์์ ๊ฐ ์นด๋์๋ ์์ ์ ์๊ฐ ์ฐ์ฌ ์๋ค. ๊ทธ๋ค์, ๋๋ฌ๋ N์ฅ์ ์นด๋๋ฅผ ๋ชจ๋ ์ซ์๊ฐ ๋ณด์ด๋๋ก ๋ฐ๋ฅ์ ๋๋๋ค. ๊ทธ๋ฐ ํ์ ๋๋ฌ๋ ์ซ์ M์ ํฌ๊ฒ ์ธ์น๋ค.
์ด์ ํ๋ ์ด์ด๋ ์ ํ๋ ์๊ฐ ์์ N์ฅ์ ์นด๋ ์ค์์ 3์ฅ์ ์นด๋๋ฅผ ๊ณจ๋ผ์ผ ํ๋ค. ๋ธ๋์ญ ๋ณํ ๊ฒ์์ด๊ธฐ ๋๋ฌธ์, ํ๋ ์ด์ด๊ฐ ๊ณ ๋ฅธ ์นด๋์ ํฉ์ M์ ๋์ง ์์ผ๋ฉด์ M๊ณผ ์ต๋ํ ๊ฐ๊น๊ฒ ๋ง๋ค์ด์ผ ํ๋ค.
N์ฅ์ ์นด๋์ ์จ์ ธ ์๋ ์ซ์๊ฐ ์ฃผ์ด์ก์ ๋, M์ ๋์ง ์์ผ๋ฉด์ M์ ์ต๋ํ ๊ฐ๊น์ด ์นด๋ 3์ฅ์ ํฉ์ ๊ตฌํด ์ถ๋ ฅํ์์ค.
์ ํ ์กฐ๊ฑด
์ ๋ ฅ: ์ฒซ์งธ ์ค์ ์นด๋์ ๊ฐ์ N(3 ≤ N ≤ 100)๊ณผ M(10 ≤ M ≤ 300,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์นด๋์ ์ฐ์ฌ ์๋ ์๊ฐ ์ฃผ์ด์ง๋ฉฐ, ์ด ๊ฐ์ 100,000์ ๋์ง ์๋๋ค.
ํฉ์ด M์ ๋์ง ์๋ ์นด๋ 3์ฅ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ: ์ฒซ์งธ ์ค์ M์ ๋์ง ์์ผ๋ฉด์ M์ ์ต๋ํ ๊ฐ๊น์ด ์นด๋ 3์ฅ์ ํฉ์ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์
<์ ๋ ฅ 1>
5 21
5 6 7 8 9
<์ถ๋ ฅ 1>
21
ํ์ด
[Golang]
package main
import (
"bufio"
"fmt"
"math"
"os"
)
var (
M int
NumSlice []int
MinDiff = math.MaxInt32
Min = math.MaxInt32
)
func abs(a int, b int) int {
if a > b {
return a - b
} else {
return b - a
}
}
func calculate(step int, index int, sum int) bool {
if sum > M {
return false
}
if step == 3 {
diff := abs(M, sum)
if MinDiff > diff {
MinDiff = diff
Min = sum
}
if diff == 0 {
return true
} else {
return false
}
}
for i := index; i < len(NumSlice); i++ {
if i + (3 - (step+1)) > len(NumSlice) - 1 {
continue
}
isEnd := calculate(step+1, i+1, sum+NumSlice[i])
if isEnd {
return true
}
}
return false
}
func main() {
r := bufio.NewReader(os.Stdin)
var n int
_, _ = fmt.Fscanf(r, "%d %d\n", &n, &M)
NumSlice = make([]int, n)
for i := 0; i < n; i++ {
_, _ = fmt.Fscanf(r, "%d", &NumSlice[i])
}
for i := 0; i < len(NumSlice); i++ {
calculate(1, i+1, NumSlice[i])
}
fmt.Print(Min)
}
[C++]
#include <iostream>
int n, m;
int arr[100];
int minDiff = 300000 * 100;
int min = 300000 * 100;
int abs(int a, int b)
{
if (a > b)
{
return a - b;
}
else
{
return b - a;
}
}
bool calculate(int step, int index, int sum)
{
if (sum > m)
{
return false;
}
if (step == 3)
{
int diff = abs(m, sum);
if (minDiff > diff)
{
minDiff = diff;
min = sum;
}
if (diff == 0)
{
return true;
}
else {
return false;
}
}
for (int i = index; i < n; i++)
{
if(i + (3 - (step+1)) > n - 1)
{
continue;
}
bool isEnd = calculate(step + 1, i + 1, sum + arr[i]);
if (isEnd)
{
return true;
}
}
return false;
}
int main()
{
std::cin.tie(NULL);
std::ios::sync_with_stdio(false);
std::cin >> n >> m;
for (int i = 0; i < n; i++)
{
std::cin >> arr[i];
}
for (int i = 0; i < n; i++)
{
calculate(1, i + 1, arr[i]);
}
std::cout << min;
return 0;
}
ํ์ด ์ค๋ช
์ฃผ์ด์ง ์ซ์์์ 3๊ฐ๋ฅผ ๋ฝ์ ๊ฐ์ฅ M๊ณผ ๊ฐ๊น์ด ๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ๋ค. ๋ฌธ์ ์๋ ์ฃผ์ด์ก๋ฏ์ด ๋ณต์ก๋๋ nC3๊ฐ ๋ ๊ฒ์ด๋ค.
์ฌ๊ทํจ์ ํํ๋ก ๊ฐ์ค์น(step)๋ฅผ ๋์ด์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ๊ตฌํ๋ ํํ๋ก ํ์๋ค. (์ด๋ M๊ณผ ํฉ์ ์ฐจ๊ฐ 0์ด๋ฉด ๋ฌด์กฐ๊ฑด ๊ฐ๊น์ด ๊ฐ์ด๋ฏ๋ก return ๊ฐ์ true๋ก ํ์ฌ ์ฌ๊ท ํจ์๋ฅผ ์ข ๋ฃํ๋๋ก ํ์๋ค.)
'Algorithm > ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++, Golang] 12865๋ฒ: ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2020.07.17 |
---|---|
[C++, Golang, Java] 14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2020.07.10 |
[C++, Golang] 11729๋ฒ: ํ๋ ธ์ด ํ ์ด๋ ์์ (0) | 2020.07.10 |
[C++, Golang] 2012๋ฒ: ๋ฑ์ ๋งค๊ธฐ๊ธฐ (0) | 2020.07.08 |
[C++] 2447๋ฒ: ๋ณ์ฐ๊ธฐ - 10 (0) | 2020.07.07 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[C++, Golang] 12865๋ฒ: ํ๋ฒํ ๋ฐฐ๋ญ
[C++, Golang] 12865๋ฒ: ํ๋ฒํ ๋ฐฐ๋ญ
2020.07.17 -
[C++, Golang, Java] 14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ
[C++, Golang, Java] 14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ
2020.07.10 -
[C++, Golang] 11729๋ฒ: ํ๋ ธ์ด ํ ์ด๋ ์์
[C++, Golang] 11729๋ฒ: ํ๋ ธ์ด ํ ์ด๋ ์์
2020.07.10 -
[C++, Golang] 2012๋ฒ: ๋ฑ์ ๋งค๊ธฐ๊ธฐ
[C++, Golang] 2012๋ฒ: ๋ฑ์ ๋งค๊ธฐ๊ธฐ
2020.07.08