์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ๊ฐ๋ฐ์์ทจ์
- ํญํด99
- tcp ํ๋กํ ์ฝ
- ์ค๋ฅ์ ์ด
- ์ค๋ธ์
- ๋ฐ์ดํฐ ์ ์ก
- leetcode
- IEEE 802
- ์ฝ๋ฉํ ์คํธ์ค๋น
- tcp ์ธ๊ทธ๋จผํธ
- i-type
- ๋น์ฃผ๊ธฐ์ ํธ
- 99ํด๋ฝ
- ์ค๋ฅ๊ฒ์ถ
- ์์๋ฒํธ
- reducible
- ์ฃผ๊ธฐ์ ํธ
- git merge
- xv6
- ์๋น์ค ํ๋ฆฌ๋ฏธํฐ๋ธ
- ํ ํฐ ๋ฒ์ค
- well known ํฌํธ
- ์ค๋ ๋
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ
- mariadb
- ํ๋ ์ ๊ตฌ์กฐ
- ์ฐ๋ถํฌdb
- ํ๋ก์ด๋์์
- til
- Today
- Total
Unfazedโ๏ธ๐ฏ
[Java] ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ, ์ ๋ ฌ | ๋ฐฑ์ค 1461 ๋์๊ด ๋ณธ๋ฌธ
[Java] ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ, ์ ๋ ฌ | ๋ฐฑ์ค 1461 ๋์๊ด
9taetae9 2024. 11. 7. 15:46https://www.acmicpc.net/problem/1461
๋ด ์ ๊ทผ ๋ฐฉ์
์์ ์ ๋ ฅ 3๊ฐ๋ฅผ ์ง์ ์์ผ๋ก ํ์ด๋ณด์๊ณ ์์ ์ถ๋ ฅ์ ๋ํ ๋ต์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ ์ ์์ด ์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ์๋ค.
์ ํ์ด ์ ๊ทผ
1. 0์ ์์น์ ์ฑ ์ด ๋ชจ์์ ธ ์์ผ๋ฏ๋ก 0์ ๊ธฐ์ค์ผ๋ก ์์ ์ชฝ์ ๋์์ผ ๋ ์ฑ ๋ค๊ณผ ์์ ์ชฝ์ ๋์์ผ ๋ ์ฑ ๋ค๋ก ๋ถ๋ฅ๋จ.
2. ์ด๋ฅผ ์ํด ์ฐ์ ์ฃผ์ด์ง ์ฑ ์ ์์น๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ.
=> ์ด ๋ถ๋ถ์์ ์ด๋ป๊ฒ ์ฑ ์ ์ฎ๊ธฐ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณ ๋ฏผํ๋๋ฐ,
๊ทธ๋ฅ M์ฉ๋ค์ด์ ๋๊ณ 0์ผ๋ก ๋์๊ฐ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ ๋ฐฉ๋ฒ์ ์ต์๊ฐ ์๋์ ํ์ธํ๋ค.
๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค 0์ ์๋ ์ฑ ์ M๊ฐ๋ฅผ ๋ค์ด ๋ฐ๋ก ์ ์์น๋ก ๋ชจ๋ ์ด๋์ํค๊ณ , ํด๋น ์์น์ ๋์ผ ์ฑ ์ ์ ์ธํ๊ณ ๋ค์ M๊ฐ์ฉ ๋ค์ด ๋ชจ๋ ๊ทธ ๋ค์ ์์น๋ก ์ด๋์ํค๋ ๋ฐฉ์์ ์๊ฐํ๋ค.
์์ 1
7 2
-37 2 -6 -39 -29 11 -28
์์ 1์ ๊ฒฝ์ฐ 7๊ฐ์ ์ฑ ์ ์ฎ๊ฒจ์ผํ๊ณ ์ต๋ 2๊ฐ์ ์ฑ ์ ๋ค์ ์์ผ๋ฏ๋ก, ์ผ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ฎ๊ฒผ์ ๋ ์ต์ ๊ฑธ์ ์๋ก ์ฑ ์ ์ฎ๊ธธ ์ ์์๋ค.
์ด๊ฒ์ ๊ณต์ํ ์ํค๊ธฐ ์ํด ์ฒ์์,
-6 ๊น์ง ์ค๋๋ฐ 5๋ฒ ์ด๋, -6์์ -28 ์ฌ์ด๋ฅผ 3๋ฒ ์ด๋, -28์์ -29๊น์ง๋ฅผ 3๋ฒ์ด๋, -29์์ -37๊น์ง 1๋ฒ, -37์์ -39๊น์ง 1๋ฒ์ผ๋ก ๋๋์ด์ ๊ท์น์ ์ฐพ์๋ณด์๋ค.
์ต๋๋ก ๋ค์ ์๋ ์ฑ M์ด 2์ฌ์ 5๋ฒ, 3๋ฒ, 3๋ฒ, 1๋ฒ, 1๋ฒ์ผ๋ก 2 ๋จ์์ฉ ํ์๊ฐ ์ฃผ๋ ํจํด์ ๋ฐ๊ฒฌํ๋๋ฐ ์ฝ๋๋ก ํํํ๋ ค๋ ๋๋ฌด ์์์ด ๋ง์์ง๋ ๋ถํธํจ์ ๋๊ผ๋ค.
์์ ๊ทธ๋ฆผ์ ํ์ดํ๋ค์ ์ด์ด์ง๊ฒ ํ๋ฒ์ ๊ทธ๋ ค๋ณด์๊ณ , ์๋์ ๊ฐ์ด ๋ ์ง๊ด์ ์ด ํจํด์ ์ฐพ์ ์ ์์๋ค.
-39๊น์ง ๊ฐ๋ ํ์ดํ(0์์ ๊ฐ์ฅ ๋ฉ๋ฆฌ ๋จ์ด์ ธ์๋ ์ง์ )์ ์ ์ธํ๊ณ ๋ ๋ชจ๋ 2๊ฐ์ ํ์ดํ๋ก ๋ํ๋ผ ์ ์์๋ค.
39๋ฅผ ๋ํ๊ณ , ๋ค์๋ก ํ์ํ ํ์ดํ๋ -39 ์ง์ ์์ 2์นธ ๋ ์ด๋ํ(M=2์ด๋ฏ๋ก) ์ง์ -29 ์์ 0๊น์ง์ ๊ธธ์ด 29๋ฅผ ๋๋ฒ,
-29 ์ง์ ์์ ๋ ์นธ ๋ ์ด๋ํ -6 ์ง์ ์์ 0๊น์ง ๊ธธ์ด 6์ ๋๋ฒ,
์์ ์ชฝ์์๋ ๋์ง์ 11์์ 2๋ฒ์ ๋ชจ๋ ํฉํ๋ฉด ์ต์ ๊ฑธ์ 131๋ฒ์ ๊ตฌํ ์ ์๋ค.
์์ 2๋ฅผ ํตํด์ ์ด ๋ฐฉ๋ฒ์ด ์ ๋ต์์ ๋ค์ ํ๋ฒ ํ์ธํ ์ ์์๋ค.
์์ 2
8 3
-18 -9 -4 50 22 -26 40 -45
์ผ์ชฝ ๋ณต์กํ ๊ทธ๋ฆผ์ ๋จ๊ณ๋ฅผ ๋ค์ ํ๋์ ํ์ดํ๋ก ๊ธธ๊ฒ ์ด์ด๋ณด๋ฉด ์๋์ ๊ฐ์ ๊ฒฝ๋ก๋ก ๋จ์ํ ์ํฌ ์ ์๋ค.
๋จ์ํ์ํจ ๊ฒฝ๋ก์์ ๊ฐ์ฅ 0์ผ๋ก ๋ถํฐ ๋จผ ๊ฑฐ๋ฆฌ์๋ 50์ ํ๋ฒ ๋๋จธ์ง 45๋ฅผ 2๋ฒ, -45์์ 3์นธ(M=3 ์ด๊ธฐ ๋๋ฌธ)๊ฐ -9์ง์ ์์ 9๋ฅผ 2๋ฒ ๋ํด์ฃผ๋ฉด ์ต์ ๊ฑธ์ 158์ ๊ตฌํ ์ ์๋ค.
์ฝ๋ ์์ฑ
N, M, books ๋ฐฐ์ด ์ด๊ธฐํ ํ books ๋ฐฐ์ด ์์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
static int N; // ์ฑ
๊ฐ์
static int M; // ํ ๋ฒ์ ์ฎ๊ธธ ์ ์๋ ์ต๋ ์ฑ
๊ฐ์
static int[] books;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
books = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
books[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(books); // NlogN
System.out.println(findMinimumSteps());
}
์ต์ ๊ฑธ์ ์๋ฅผ ๋ฐํํ๋ findMinimumSteps() ๋ฉ์๋ ๊ตฌํ
int totalSteps : ์ด ๊ฑธ์ ์
int lastNegativeIndex : ์์์ ์์์ ๊ฒฝ๊ณ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ๊ฐ์ฅ ๋ง์ง๋ง ์์ ์งํ ์ธ๋ฑ์ค(์ฒซ ์์ ๋ฑ์ฅํ๋ ์ง์ )
int farthest : 0 ๊ธฐ์ค ๊ฐ์ฅ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋ ๊ฑฐ๋ฆฌ => ํธ๋ ์ฒ๋ฆฌ(1๋ฒ๋ง ๋ํ ๊ฑฐ๋ฆฌ)
=> ์์, ์์ ๋๋ค ์กด์ฌํ ๊ฒฝ์ฐ : ์ฒซ ์์์ ์ ๋๊ฐ๊ณผ ๋ง์ง๋ง ์์์ ๋์ ๋น๊ต
=> ์์๋ง ์์ ๊ฒฝ์ฐ : ๊ฐ์ฅ ๋ ์์, ์์๋ง ์์ ๊ฒฝ์ฐ : ๊ฐ์ฅ ์ฒซ ์์์ ์ ๋๊ฐ
์์ ๊ตฌ๊ฐ ๋ด : ์ฒซ ์์ ๋ถํฐ M ๋จ์๋ก ์ธ๋ฑ์ค ์ ํํ๋ฉฐ totalSteps์ ๊ฑฐ๋ฆฌ ๋ํ๊ธฐ
์์ ๊ตฌ๊ฐ ๋ด : ๋ง์ง๋ง ์์๋ถํฐ -M ๋จ์๋ก ์ธ๋ฑ์ค ์ ํํ๋ฉฐ totalSteps์ ๊ฑฐ๋ฆฌ ๋ํ๊ธฐ
์ด๋ ๊ฒ ๊ตฌํ totalSteps์ 2๋ฅผ ๊ณฑํ์ฌ ํ๋ฒ์ ์๋ณต ์ฒ๋ฆฌ
๋ง์ง๋ง์ผ๋ก ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ์๋ farthest์์๋ ๋ค์ 0์ผ๋ก ๋์๊ฐ์ง ์์ผ๋ฏ๋ก ์๋ณต ์ฒ๋ฆฌํ๋ ๊ฒ์์ ํ๋ฒ ๋นผ์ฃผ์ด ์ ์ธ์ํจ๋ค.
totalSteps -= farthest;
private static int findMinimumSteps() {
int totalSteps = 0;
int lastNegativeIndex = 0;
while (lastNegativeIndex < N && books[lastNegativeIndex] < 0) {
lastNegativeIndex++;
}
// ๊ฐ์ฅ ๋จผ ์์น ํ์ธ
int farthest = 0;
if (lastNegativeIndex > 0 && lastNegativeIndex < N) {
farthest = Math.max(Math.abs(books[0]), books[N - 1]);
} else if (lastNegativeIndex == 0) { // ์์๋ง ์์ ๋
farthest = books[N - 1];
} else { // ์์๋ง ์์ ๋
farthest = -books[0];
}
// ์์ (0 ~ lastNegativeIndex ๋ฏธ๋ง)
for (int i = 0; i < lastNegativeIndex; i += M) { //M๊ฐ ๋จ์๋ก ์ฎ๊ธฐ๊ธฐ
totalSteps += Math.abs(books[i]);
}
// ์์ (lastNegativeIndex ~ ๋)
for (int i = N - 1; i >= lastNegativeIndex; i -= M) {
totalSteps += books[i];
}
totalSteps *= 2; //๋ชจ๋ ๊ฒฝ์ฐ ์๋ณต ์ฒ๋ฆฌ ์ํด 2๋ฐฐ ์ฒ๋ฆฌ
totalSteps -= farthest; //๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ ํธ๋ ์ฒ๋ฆฌ
return totalSteps;
}
์ด๋ฒ ๋ฌธ์ ๋ ์ง์ ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด๊ณ ํผ ์ฝ๋๋ก ์์ฑํ๊ธฐ์๋ ๋ณต์กํ๋ ๋ก์ง์ ๋จ์ํํ๋ ๋จ๊ณ์์ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค. ์ข ๋ ๋ค์ํ ๋ฌธ์ ๋ฅผ ๊ฒฝํํ๋ฉด์ ๊ณ ๋ฏผํ๋ ์๊ฐ์ ๋จ์ถ์์ผ๋ด์ผ๊ฒ ๋ค.
'๋ฌธ์ ํด๊ฒฐ (PS) > ์ฝํ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ ๋ ฌ, ๊ทธ๋ฆฌ๋ | ๋ฐฑ์ค 1083 ์ํธ (0) | 2024.11.17 |
---|---|
[Java] ๋ค์ต์คํธ๋ผ, BFS | ๋ฐฑ์ค 2665 ๋ฏธ๋ก๋ง๋ค๊ธฐ (0) | 2024.11.11 |
[Java] ํฌํฌ์ธํฐ | ๋ฐฑ์ค 1253 ์ข๋ค (0) | 2024.11.07 |
[Java] ํธ๋ฆฌ, ๊ตฌํ | ํ๋ก๊ทธ๋๋จธ์ค ๋ค๋จ๊ณ ์นซ์ ํ๋งค (0) | 2024.11.06 |
[Java] ๋๋น ์ฐ์ ํ์ BFS| ๋ฐฑ์ค 1240 ๋ ธ๋์ฌ์ด์ ๊ฑฐ๋ฆฌ (0) | 2024.11.04 |