๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

|a - b| = |c - d| ์ ˆ๋Œ€๊ฐ’ ์ฐจ์ด๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ ํ™œ์šฉํ•˜๊ธฐ ๋ณธ๋ฌธ

๋ฌธ์ œ ํ•ด๊ฒฐ (PS)/๊ธฐ์–ตํ•ด๋‘˜ ๊ฒƒ

|a - b| = |c - d| ์ ˆ๋Œ€๊ฐ’ ์ฐจ์ด๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ ํ™œ์šฉํ•˜๊ธฐ

9taetae9 2024. 9. 19. 23:39
728x90

๋‘ ๊ฐ’์˜ ์ฐจ์ด์˜ ์ ˆ๋Œ€๊ฐ’์ด ์„œ๋กœ ๊ฐ™์€ ๊ฒฝ์šฐ ์ˆ˜ํ•™์—์„œ๋Š” |a - b| = |c - d| ์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•œ๋‹ค.

ํ•ด๋‹น ๊ฐœ๋…์„ ์ž˜ ์ˆ™์ง€ํ•˜๊ณ  ์žˆ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์ด ๊ฐœ๋…์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1. ๊ธฐํ•˜ํ•™์  ๊ด€๊ณ„ ํŒŒ์•…

  • ์˜ˆ: N-Queen ๋ฌธ์ œ์—์„œ ๋Œ€๊ฐ์„  ๊ด€๊ณ„ ํ™•์ธ
  • ์‘์šฉ: ๊ฒฉ์ž ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„, ๊ฒฝ๋กœ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ–‰๊ฐ„ ์ฐจ์ด์™€ ์—ด๊ฐ„ ์ฐจ์ด๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ ์  A, ์  B๋Š” ๋™์ผ ๋Œ€๊ฐ์„ ์ƒ์— ๋†“์ธ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๋‹น ๊ฒฝ์šฐ๋ฅผ N-queen ๋ฌธ์ œ์—์„œ ๋Œ€๊ฐ์„ ์ƒ์— ๋ง์ด ๋†“์ด๋Š” ๊ฒฝ์šฐ์˜ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ex ) if(Math.abs(x2 - x1) == Math.abs(y2 - y1))

 

 

  • A* ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๋Œ€๊ฐ์„  ์ด๋™ ๋น„์šฉ ๊ณ„์‚ฐ
  • ๋กœ๋ด‡ ๋‚ด๋น„๊ฒŒ์ด์…˜์—์„œ ์žฅ์• ๋ฌผ ํšŒํ”ผ ๊ฒฝ๋กœ ๊ณ„์‚ฐ

 

double calculateHeuristic(int x1, int y1, int x2, int y2) {

    int dx = Math.abs(x2 - x1); int dy = Math.abs(y2 - y1);

    int diagonalSteps = Math.min(dx, dy);

    int straightSteps = Math.max(dx, dy) - diagonalSteps;

    return diagonalSteps * Math.sqrt(2) + straightSteps;

}

 

2. ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ ๋ถ„์„

  • ์˜ˆ: ์ด๋ฒคํŠธ ๊ฐ„์˜ ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ ํ™•์ธ
  • ์‘์šฉ: ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ๋ถ„์„

์ด๋ฒคํŠธ ๊ฐ„์˜ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ด ์ผ์ •ํ•œ์ง€ ํ™•์ธ์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ์ƒํ™ฉ์—์„œ๋„ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

ex)

boolean isConstantInterval(long[] timestamps) {
    if (timestamps.length < 3) return true;
    long interval = Math.abs(timestamps[1] - timestamps[0]);
    for (int i = 2; i < timestamps.length; i++) {
        if (Math.abs(timestamps[i] - timestamps[i-1]) != interval) {
            return false;
        }
    }
    return true;
}

3. ํŒจํ„ด ์ธ์‹

  • ์˜ˆ: ๋ฌธ์ž์—ด์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ํŒจํ„ด ์ฐพ๊ธฐ
  • ์‘์šฉ: ๋ฐ์ดํ„ฐ ์••์ถ•, ์•”ํ˜ธํ•™

ex) "abcabcabcabc"์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ๊ฐ€์žฅ ์งง์€ ํŒจํ„ด ์ฐพ๊ธฐ (|s[i] - s[i+k]| == 0 (์—ฌ๊ธฐ์„œ k๋Š” ํŒจํ„ด์˜ ๊ธธ์ด))

String findPattern(String s) {
    for (int k = 1; k <= s.length() / 2; k++) {
        if (s.length() % k == 0) {
            boolean isPattern = true;
            for (int i = 0; i < s.length() - k; i++) {
                if (s.charAt(i) != s.charAt(i + k)) {
                    isPattern = false;
                    break;
                }
            }
            if (isPattern) {
                return s.substring(0, k);
            }
        }
    }
    return s;
}

 

4. ๊ท ํ˜• ์žกํžŒ ๊ตฌ์กฐ ํ™•์ธ

  • ์˜ˆ: ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊ท ํ˜• ์ƒํƒœ ๊ฒ€์‚ฌ
  • ์‘์šฉ: ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ตœ์ ํ™”, ๋„คํŠธ์›Œํฌ ํ† ํด๋กœ์ง€ ๋ถ„์„

ex) ํŠธ๋ฆฌ๊ฐ€ ๊ท ํ˜•์„ ์ด๋ฃจ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ (๋ชจ๋“  ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊นŠ์ด ์ฐจ์ด๊ฐ€ 1 ์ดํ•˜) 

๊นŠ์ด ์ฐจ์ด์˜ ์ ˆ๋Œ€๊ฐ’์ด 1์ดํ•˜์ธ์ง€ ํ™•์ธ : |depth(leftSubtree) - depth(rightSubtree)| <= 1

class TreeNode {
    TreeNode left, right;
    int val;
}

boolean isBalanced(TreeNode root) {
    return checkBalance(root) != -1;
}

int checkBalance(TreeNode node) {
    if (node == null) return 0;

    int leftHeight = checkBalance(node.left);
    if (leftHeight == -1) return -1;

    int rightHeight = checkBalance(node.right);
    if (rightHeight == -1) return -1;

    if (Math.abs(leftHeight - rightHeight) > 1) return -1;

    return Math.max(leftHeight, rightHeight) + 1;
}
728x90