๊ณจ๋4
์ค์นด์ด๋ผ์ธ ์ฌ์ด๊ฑฐ JAVA ์ฝ๋
๊ฑด๋ฌผ ๋์ด์ ์ค๊ณฝ์ ๋ณด๊ณ ๊ฑด๋ฌผ์ ์ต์ ์๋ฅผ ์์๋ด๋ ๋ฌธ์ ๋ค.
๊ฑด๋ฌผ ๋์ด๋ ์ค๊ณฝ๋ง ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ค๋ณต ๋์ด๋ ๊ฐ์ ๊ฑด๋ฌผ์ด๋ผ๊ณ ๋ณผ ์๋ ์๋ค. ๋จ, ์ค๋ณต ๋์ด ์ฌ์ด์ ๊ทธ ๋์ด๋ณด๋ค ๋ฎ์ ๋์ด์ ์ค๊ณฝ์ด ์กด์ฌํ๋ค๋ฉด, ๋ ๊ฐ์ ๊ฑด๋ฌผ๋ก ๋๋๋ค๊ณ ๋ณผ ์ ์๋ค.
(์์1) ๋์ด๊ฐ {5, 7, 5}๋ก ์ฃผ์ด์ง๋ฉด, ๊ฑด๋ฌผ์ ์ต์ ์๋ 2๋ค. 5์ 5๋ ๊ฐ์ ๊ฑด๋ฌผ์ด๋ผ ์๊ฐํ ์ ์๊ณ , ๋์ด๊ฐ ๋ค๋ฅธ 7๋ ํ๋์ ๊ฑด๋ฌผ์ด๋ค.
(์์2) ๋์ด๊ฐ {4, 0, 4}๋ก ์ฃผ์ด์ง๋ฉด, ๊ฑด๋ฌผ์ ์ต์ ์๋ 2๋ค. ๋์ด 4๊ฐ ๋ ๊ฐ ์์ง๋ง, ์ค๊ฐ์ 0์ด ์๊ธฐ ๋๋ฌธ์ ์ค๋ณต์ ์ ๊ฑฐํ์ง ์๋๋ค.
๊ทธ๋์ ๊ฑด๋ฌผ ๋์ด์ ์์๊ฐ ์ค์ํ๋ค. ํ์ฌ ๋์ด๋ณด๋ค ๋ค์ ๋์ด๊ฐ ๋ ๋ฎ์ผ๋ฉด, ์ด ๋ค์ ๋์ด๋ณด๋ค ๋์ ๊ฑด๋ฌผ๋ค์ ์์ผ๋ก ์ํํ ๋ชจ๋ ๊ฑด๋ฌผ๋ค๊ณผ ๋ถ๋ฆฌ๋ ๋ณ๋์ ๊ฑด๋ฌผ์ด๋ค.
์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํด์ ํ์ด๋ฅผ ๊ณ ์ํ๋ค.
์คํ์ด ๋น์ด์์ผ๋ฉด ๋น๊ตํ ๋์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋จ์ํ ๋ํด์ฃผ๋ฉด ๋๋ค.
๋ค์ ๋์ด๊ฐ ๋ ๋์ผ๋ฉด (์์1)์ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ๊ธฐ ์ํด ์ผ๋จ ์คํ์ ๋ํด์ค๋ค.
์ด ๊ฒฝ์ฐ๋ (์์2)์ ๊ฐ์ผ๋ฏ๋ก, ๋ค์ ๋์ด์ ๊ฐ๊ฑฐ๋ ๋ฎ์ ๋์ด๊น์ง pop
ํด์ค์ผ ํ๋ค.
์ด ๋๋ ์ค๋ณต ๋์ด๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ๋ํด์ค ํ์ ์๋ค.
ArrayDeque<Integer> stack = new ArrayDeque<>();
int ans = 0;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
while (!stack.isEmpty() && stack.peekLast() > y) {
ans++;
stack.pollLast();
}
if (stack.isEmpty() || stack.peekLast() < y) {
stack.add(y);
}
}
๋ง์ง๋ง์ผ๋ก, ์ํ๊ฐ ๋๋ ์ดํ ์คํ์ ๋จ์์๋ ๋์ด๋ 0์ด ์๋ ์ด์ ๋ชจ๋ ๊ฐ๋ณ ๋น๋ฉ์ด๋ค.
while (!stack.isEmpty()) {
if (stack.pollLast() > 0) ans++;
}
System.out.println(ans);
๊ณจ๋4
์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๊ฒ ์ซ์๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐพ์์ผ ํ๋ค๋ ์๊ฐ์ ์ด๋ถํ์ ๋๋ ํฌํฌ์ธํฐ๋ฅผ ์๊ฐํ๋ค.
private static boolean binarySearch(int[] nums, int target, int idx) {
int left = 0, right = nums.length - 1;
while (left < right) {
if (left == idx) {
left++; // ์๊ธฐ ์์ ์ ์ฌ์ฉํ ์ ์๋ค.
continue;
} else if (right == idx) {
right--; // ์๊ธฐ ์์ ์ ์ฌ์ฉํ ์ ์๋ค.
continue;
}
int sum = nums[left] + nums[right];
if (sum == target) {
return true;
} else if (sum > target) {
right--;
} else {
left++;
}
}
return false;
}
๊ณจ๋3
์ฉ์ก ํ ๊ฐ๋ฅผ ์ ํํ ๋ค์, ๋๋จธ์ง ๋๊ฐ๋ฅผ ํฌํฌ์ธํฐ๋ก ๊ณจ๋ผ๊ฐ๋ฉฐ 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ํน์ฑ๊ฐ์ ์ฐพ๋๋ค.
Arrays.sort(nums);
long minDiff = Long.MAX_VALUE;
long[] ans = new long[3];
for (int i = 0; i < N; i++) {
long[] tmp = solve(nums, nums[i], i);
if (Math.abs(tmp[0] + tmp[1] + tmp[2]) < minDiff) {
minDiff = Math.abs(tmp[0] + tmp[1] + tmp[2]);
ans = tmp;
}
}
Arrays.sort(ans);
System.out.println(ans[0]+" "+ans[1]+" "+ans[2]);
0์ ๋ ๊ฐ๊น์ด ํน์ฑ๊ฐ์ ์ฐพ์ผ๋ฉด ์ ๋ต ๋ฐฐ์ด์ ์ ๋ฐ์ดํธํ๋ค.
ํฌํฌ์ธํฐ ํจ์์ ๊ธฐ์ค ์ฉ์ก๊ณผ ๊ทธ ์ธ๋ฑ์ค๋ฅผ ์ธ์๋ก ๋ฐ์ ์ค๋ณต ์ ํํ์ง ์๋๋ก ์ ์ํ๋ค.
private static long[] solve(long[] nums, long chosen, int idx) {
int left = 0, right = nums.length - 1;
long[] ans = new long[3];
ans[0] = chosen;
long tmpDiff = Long.MAX_VALUE;
while (left < right) {
if (left == idx) {
left++;
continue;
} else if (right == idx) {
right--;
continue;
}
long s = Math.abs(chosen + nums[left] + nums[right]);
if (s < tmpDiff) {
ans[1] = nums[left];
ans[2] = nums[right];
tmpDiff = s;
if (tmpDiff == 0) {
return ans;
}
} else if (chosen + nums[left] + nums[right] > 0) {
right--;
} else {
left++;
}
}
return ans;
}
๋ธ๋ก ์ฆ1
i
์์ i+1
๋ก)i
์์ i-1
๋ก)i+1
์ ๊ฐ๋ฅดํจ๋ค)i-1
์ ๊ฐ๋ฅดํจ๋ค)์ต๋ ์ฑ๋ ์๊ฐ 100๊ฐ๋ก ์ ํ๋์ด ์๊ณ , ์ฐ๋ฆฌ์ ๋ชฉํ๋ ๋ ์ฑ๋์ ์์น๊ธฐ ๋๋ฌธ์ ๋จ์ํ๊ฒ 1๊ณผ 4๋ง ์ด์ฉํด์ ํ์ดํด๋ ์ต๋ ์ด๋ ํ์์ธ 500์ ๋์ง ์๋๋ค
int kbs1_idx = -1, kbs2_idx = -1;
for (int i = 0; i <N; i++) {
String channel = br.readLine();
if (channel.equals(FIRST)) kbs1_idx = i;
if (channel.equals(SEC)) kbs2_idx = i;
}
KBS2๊ฐ KBS1 ์ด์ ์ ์กด์ฌํ๋ฉด KBS1์ ์ํ ์ด๋์์
๋๋ฌธ์ ํ ์นธ ์๋๋ก ๋ฐ๋ฆด ๊ฒ์ด๋ค. (KBS1์ ์๋ก ์ฌ๋ฆฌ๋ ค๋ฉด ๊ทธ ์์ ์ฑ๋๋ค์ด ํ ์นธ์ฉ์ผ๋ก ์๋๋ก ์ด๋ํ๋ค)
๊ทธ๋์ ์ด ๊ฒฝ์ฐ์๋ KBS2 ์ธ๋ฑ์ค์ 1์ ์ถ๊ฐํ๋ค
if (kbs1_idx > kbs2_idx) kbs2_idx++;
ํ์ดํ๋ 0์์ ์์ํด์ kbs1_idx
๊น์ง ์ด๋ํ๊ธฐ ์ํด kbs1_idx
๋ฒ 1์ ์ฌ์ฉํ๋ค.
๊ทธ ๋ค์ kbs1_idx
์ ์๋ ์ฑ๋์ 0๊น์ง ์ฌ๋ฆฌ๊ธฐ ์ํด kbs1_idx
๋ฒ 4๋ฅผ ์ฌ์ฉํ๋ค.
output.append(CURSOR_DOWN.repeat(kbs1_idx));
output.append(SWAP_UP.repeat(kbs1_idx));
์ด๋ฏธ KBS2๊ฐ ์ฒซ๋ฒ์งธ ์์น์ ์์นํ๋ค๋ฉด ํ์์๋ ์์ ์ด๋ค.
KBS1๋ฅผ 0๋ฒ์งธ ์์น์ ์ด๋์ํจ ์ํ์ด๋ ๋ 0์์ ์์ํด์ kbs2_idx
๊น์ง ์ด๋ํ๋ค. kbs2_idx
๋ฒ 1์ ์ฌ์ฉํ๋ค.
๊ทธ ๋ค์ kbs2_idx
์ ์๋ ์ฑ๋์ 1๊น์ง ์ฌ๋ฆฌ๊ธฐ ์ํด kbs2_idx-1
๋ฒ 4๋ฅผ ์ฌ์ฉํ๋ค.
if (kbs2_idx != 1) {
output.append(CURSOR_DOWN.repeat(kbs2_idx));
output.append(SWAP_UP.repeat(kbs2_idx-1));
}