์Šค์นด์ด๋ผ์ธ ์‰ฌ์šด๊ฑฐ [๋ฐฑ์ค€#1864]

๊ณจ๋“œ4

์Šค์นด์ด๋ผ์ธ ์‰ฌ์šด๊ฑฐ JAVA ์ฝ”๋“œ

๋ฌธ์ œ ์ดํ•ด

๊ฑด๋ฌผ ๋†’์ด์˜ ์œค๊ณฝ์„ ๋ณด๊ณ  ๊ฑด๋ฌผ์˜ ์ตœ์†Œ ์ˆ˜๋ฅผ ์•Œ์•„๋‚ด๋Š” ๋ฌธ์ œ๋‹ค.

๊ฑด๋ฌผ ๋†’์ด๋Š” ์œค๊ณฝ๋งŒ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต ๋†’์ด๋Š” ๊ฐ™์€ ๊ฑด๋ฌผ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค. ๋‹จ, ์ค‘๋ณต ๋†’์ด ์‚ฌ์ด์— ๊ทธ ๋†’์ด๋ณด๋‹ค ๋‚ฎ์€ ๋†’์ด์˜ ์œค๊ณฝ์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ๋‘ ๊ฐœ์˜ ๊ฑด๋ฌผ๋กœ ๋‚˜๋‰œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

(์˜ˆ์‹œ1) ๋†’์ด๊ฐ€ {5, 7, 5}๋กœ ์ฃผ์–ด์ง€๋ฉด, ๊ฑด๋ฌผ์˜ ์ตœ์†Œ ์ˆ˜๋Š” 2๋‹ค. 5์™€ 5๋Š” ๊ฐ™์€ ๊ฑด๋ฌผ์ด๋ผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ณ , ๋†’์ด๊ฐ€ ๋‹ค๋ฅธ 7๋„ ํ•˜๋‚˜์˜ ๊ฑด๋ฌผ์ด๋‹ค.

(์˜ˆ์‹œ2) ๋†’์ด๊ฐ€ {4, 0, 4}๋กœ ์ฃผ์–ด์ง€๋ฉด, ๊ฑด๋ฌผ์˜ ์ตœ์†Œ ์ˆ˜๋Š” 2๋‹ค. ๋†’์ด 4๊ฐ€ ๋‘ ๊ฐœ ์žˆ์ง€๋งŒ, ์ค‘๊ฐ„์— 0์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋ž˜์„œ ๊ฑด๋ฌผ ๋†’์ด์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. ํ˜„์žฌ ๋†’์ด๋ณด๋‹ค ๋‹ค์Œ ๋†’์ด๊ฐ€ ๋” ๋‚ฎ์œผ๋ฉด, ์ด ๋‹ค์Œ ๋†’์ด๋ณด๋‹ค ๋†’์€ ๊ฑด๋ฌผ๋“ค์€ ์•ž์œผ๋กœ ์ˆœํšŒํ•  ๋ชจ๋“  ๊ฑด๋ฌผ๋“ค๊ณผ ๋ถ„๋ฆฌ๋œ ๋ณ„๋„์˜ ๊ฑด๋ฌผ์ด๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด์„œ ํ’€์ด๋ฅผ ๊ณ ์•ˆํ–ˆ๋‹ค.

  1. ํ˜„์žฌ ์Šคํƒ์ด ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ

์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด ๋น„๊ตํ•  ๋†’์ด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํžˆ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

  1. ํ˜„์žฌ ์Šคํƒ์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๊ฐ’๋ณด๋‹ค ๋‹ค์Œ ๋†’์ด๊ฐ€ ๋” ๋†’์„ ๊ฒฝ์šฐ

๋‹ค์Œ ๋†’์ด๊ฐ€ ๋” ๋†’์œผ๋ฉด (์˜ˆ์‹œ1)์˜ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋‹จ ์Šคํƒ์— ๋”ํ•ด์ค€๋‹ค.

  1. ํ˜„์žฌ ์Šคํƒ์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๊ฐ’๋ณด๋‹ค ๋‹ค์Œ ๋†’์ด๊ฐ€ ๋” ๋‚ฎ์„ ๊ฒฝ์šฐ

์ด ๊ฒฝ์šฐ๋Š” (์˜ˆ์‹œ2)์™€ ๊ฐ™์œผ๋ฏ€๋กœ, ๋‹ค์Œ ๋†’์ด์™€ ๊ฐ™๊ฑฐ๋‚˜ ๋‚ฎ์€ ๋†’์ด๊นŒ์ง€ popํ•ด์ค˜์•ผ ํ•œ๋‹ค.

  1. ํ˜„์žฌ ์Šคํƒ์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๊ฐ’๊ณผ ๋‹ค์Œ ๋†’์ด๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ

์ด ๋•Œ๋Š” ์ค‘๋ณต ๋†’์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ๋”ํ•ด์ค„ ํ•„์š” ์—†๋‹ค.

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);

์ข‹๋‹ค [๋ฐฑ์ค€#1253]

๊ณจ๋“œ4

์ข‹๋‹ค JAVA ์ฝ”๋“œ

๋ฌธ์ œ ์ดํ•ด

  • N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค
    • 1 <= N <= 2000
    • ์ˆ˜ ์ ˆ๋Œ“๊ฐ’ ๋ฒ”์œ„: 1,000,000,000
  • N๊ฐœ ์˜ ์ˆ˜ ์ค‘ ์–ด๋–ค ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ˆ˜ 2 ๊ฐœ์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹๋‹ค.
    • ๋‹ค๋ฅธ 2 ๊ฐœ์˜ ์ˆ˜๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค => ๋ณธ์ธ ํฌํ•จ ๊ธˆ์ง€
    • ์ˆ˜์˜ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ฐ’์ด ๊ฐ™์•„๋„ ๋‹ค๋ฅธ ์ˆ˜๋‹ค
    • ์ข‹์€ ์ˆ˜์˜ ๊ฐœ์ˆ˜ ์ถœ๋ ฅ

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํƒ€๊ฒŸ ์ˆซ์ž๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฐพ์•„์•ผ ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์— ์ด๋ถ„ํƒ์ƒ‰ ๋˜๋Š” ํˆฌํฌ์ธํ„ฐ๋ฅผ ์ƒ๊ฐํ–ˆ๋‹ค.

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;
}

์„ธ ์šฉ์•ก [๋ฐฑ์ค€#2473]

๊ณจ๋“œ3

์„ธ ์šฉ์•ก JAVA ์ฝ”๋“œ

๋ฌธ์ œ ์ดํ•ด

  • ์ „์ฒด ์šฉ์•ก N๊ฐœ
    • 3 <= N <= 5000
    • -1,000,000,000 <= ์šฉ์•ก ๊ฐ’ <= 1,000,000,000
  • 0์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํŠน์„ฑ๊ฐ’์„ ๋งŒ๋“œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ 3๊ฐœ ์šฉ์•ก์„ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅ

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

์šฉ์•ก ํ•œ ๊ฐœ๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ, ๋‚˜๋จธ์ง€ ๋‘๊ฐœ๋ฅผ ํˆฌํฌ์ธํ„ฐ๋กœ ๊ณจ๋ผ๊ฐ€๋ฉฐ 0์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํŠน์„ฑ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.

1. ์šฉ์•ก ๋ฐฐ์—ด์„ ์ •๋ ฌํ•œ ๋‹ค์Œ, ๊ธฐ์ค€ ์šฉ์•ก์„ ๊ณจ๋ผ ํˆฌํฌ์ธํ„ฐ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

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์— ๋” ๊ฐ€๊นŒ์šด ํŠน์„ฑ๊ฐ’์„ ์ฐพ์œผ๋ฉด ์ •๋‹ต ๋ฐฐ์—ด์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

2. ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•œ๋‹ค.

ํˆฌํฌ์ธํ„ฐ ํ•จ์ˆ˜์— ๊ธฐ์ค€ ์šฉ์•ก๊ณผ ๊ทธ ์ธ๋ฑ์Šค๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์ค‘๋ณต ์„ ํƒํ•˜์ง€ ์•Š๋„๋ก ์œ ์˜ํ•œ๋‹ค.

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;
}

๋””์ง€ํ„ธ ํ‹ฐ๋น„ [๋ฐฑ์ค€#2816]

๋ธŒ๋ก ์ฆˆ1

๋””์ง€ํ„ธ ํ‹ฐ๋น„ JAVA ์ฝ”๋“œ

๋ฌธ์ œ ์ดํ•ด

  • N๊ฐœ์˜ ์ค‘๋ณต ์—†๋Š” ์ฑ„๋„๋ช…์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค
    • 2 <= N <= 100
  • ๋ชฉํ‘œ๋Š” KBS1๋ฅผ ์ฒซ๋ฒˆ์งธ๋กœ, KBS2๋ฅผ ๋‘๋ฒˆ์งธ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค
    • ์ด๋ฏธ KBS1๊ฐ€ ์ฒซ๋ฒˆ์งธ, KBS2๊ฐ€ ๋‘๋ฒˆ์งธ์ธ ์ž…๋ ฅ์€ ์ฃผ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค
  • 4๊ฐœ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค
    • 1 - ํ™”์‚ดํ‘œ๋ฅผ ํ•œ ์นธ ์•„๋ž˜๋กœ ๋‚ด๋ฆฐ๋‹ค (i์—์„œ i+1๋กœ)
    • 2 - ํ™”์‚ดํ‘œ๋ฅผ ํ•œ ์นธ ์˜ฌ๋ฆฐ๋‹ค (i์—์„œ i-1๋กœ)
    • 3 - ํ˜„์žฌ ์„ ํƒํ•œ ์ฑ„๋„์„ ์•„๋ž˜๋กœ ๋‚ด๋ฆฐ๋‹ค (ํ™”์‚ดํ‘œ๋Š” i+1์„ ๊ฐ€๋ฅดํ‚จ๋‹ค)
    • 4 - ํ˜„์žฌ ์„ ํƒํ•œ ์ฑ„๋„์„ ์œ„๋กœ ์˜ฌ๋ฆฐ๋‹ค (ํ™”์‚ดํ‘œ๋Š” i-1์„ ๊ฐ€๋ฅดํ‚จ๋‹ค)
  • ์ด๋™ ํšŸ์ˆ˜๋Š” 500์œผ๋กœ ์ œํ•œํ•œ๋‹ค

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

์ตœ๋Œ€ ์ฑ„๋„ ์ˆ˜๊ฐ€ 100๊ฐœ๋กœ ์ œํ•œ๋˜์–ด ์žˆ๊ณ , ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ๋‘ ์ฑ„๋„์˜ ์œ„์น˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํ•˜๊ฒŒ 1๊ณผ 4๋งŒ ์ด์šฉํ•ด์„œ ํ’€์ดํ•ด๋„ ์ตœ๋Œ€ ์ด๋™ ํšŸ์ˆ˜์ธ 500์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค

1. KBS1๊ณผ KBS2์˜ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•œ๋‹ค.

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;
}

2. KBS2์˜ ์ธ๋ฑ์Šค๋ฅผ ์กฐ์ •ํ•œ๋‹ค

KBS2๊ฐ€ KBS1 ์ด์ „์— ์กด์žฌํ•˜๋ฉด KBS1์„ ์œ„ํ•œ ์ด๋™์ž‘์—… ๋•Œ๋ฌธ์— ํ•œ ์นธ ์•„๋ž˜๋กœ ๋ฐ€๋ฆด ๊ฒƒ์ด๋‹ค. (KBS1์„ ์œ„๋กœ ์˜ฌ๋ฆฌ๋ ค๋ฉด ๊ทธ ์œ„์˜ ์ฑ„๋„๋“ค์ด ํ•œ ์นธ์”ฉ์œผ๋กœ ์•„๋ž˜๋กœ ์ด๋™ํ•œ๋‹ค)
๊ทธ๋ž˜์„œ ์ด ๊ฒฝ์šฐ์—๋Š” KBS2 ์ธ๋ฑ์Šค์— 1์„ ์ถ”๊ฐ€ํ•œ๋‹ค

if (kbs1_idx > kbs2_idx) kbs2_idx++;

3. KBS1 ์ธ๋ฑ์Šค๊นŒ์ง€ 1๋กœ ํ™”์‚ดํ‘œ๋ฅผ ์ด๋™ํ•œ ๋‹ค์Œ, 4๋กœ ์ฒซ๋ฒˆ์งธ ์œ„์น˜๊นŒ์ง€ ์ด๋™์‹œํ‚จ๋‹ค

ํ™”์‚ดํ‘œ๋Š” 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));

4. KBS2 ์ธ๋ฑ์Šค๊นŒ์ง€ 1๋กœ ์ปค์„œ ์ด๋™ํ•œ ๋‹ค์Œ, 4๋กœ ๋‘๋ฒˆ์งธ ์œ„์น˜๊นŒ์ง€ ์ด๋™์‹œํ‚จ๋‹ค

์ด๋ฏธ 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));
}

profile
์šฐ๋‹นํƒ•ํƒ•

0๊ฐœ์˜ ๋Œ“๊ธ€