๊ธฐ๋ก๋ฐฉ

Lv.3 : ๊ณต ์ด๋™ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ณธ๋ฌธ

CodingTest/Java

Lv.3 : ๊ณต ์ด๋™ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

Soom_1n 2024. 8. 2. 21:35

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ๋ฌธ์ œ๋Š” ์ฟผ๋ฆฌ ๋ช…๋ น์— ๋”ฐ๋ผ n x m ๊ฒฉ์žํŒ์—์„œ ์ด๋™ํ•˜๋Š” ๊ณต์˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์„ค๋ช…์ด ์ฃผ์–ด์ง„๋‹ค.
  • ์ฟผ๋ฆฌ์— ๋”ฐ๋ผ ์ด๋™ํ–ˆ์„ ๋•Œ, (x, y) ์œ„์น˜์— ๋„์ฐฉํ•˜๋Š” ์‹œ์ž‘ ์œ„์น˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • n, m์˜ ์ตœ๋Œ€๊ฐ’์€ 1์–ต์ด๊ณ , ์ฟผ๋ฆฌ์˜ ๊ฐœ์ˆ˜๋Š” 20๋งŒ์ด๊ธฐ ๋•Œ๋ฌธ์— BFS, DFS ๋“ฑ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ or ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ํ’€์ด ํฌ์ธํŠธ๋Š” '์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰'์ด๋‹ค.
    • ๋ชจ๋“  ์ธ๋ฑ์Šค์—์„œ ์ฟผ๋ฆฌ๋ฅผ ๋Œ๋ ค (x, y)์— ๋„์ฐฉํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,
      (x, y)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์—ญ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋Œ๋ ค ๋„์ฐฉํ•˜๋Š” ์ธ๋ฑ์Šค์˜ ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๋ฉด ๋œ๋‹ค.
    • ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ƒ๋‹นํžˆ ์ค„์–ด๋“œ๋Š”๋ฐ, ๋ฒฝ์— ๋ถ€๋”›ํ˜€์„œ ์›€์ง์ด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
    • ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๋ดค์„ ๋•Œ, ๋ฒฝ์œผ๋กœ ๋ถ™๋Š” ๊ฒฝ์šฐ๋Š” ์ด๋™๊ฑฐ๋ฆฌ -1 ๊ฐœ๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ํ’€์ด ํฌ์ธํŠธ๋Š” '์ ์ด ์•„๋‹Œ ๋ฉด(์ง์‚ฌ๊ฐํ˜•) ํƒ์ƒ‰'์ด๋‹ค.
    • ์ธ๋ฑ์Šค์˜ ๋ฒ”์œ„๊ฐ€ 1์–ต๊นŒ์ง€ ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—, ๋ฒฝ์œผ๋กœ ๋ถ™๋Š” ๊ฒฝ์šฐ์ธ '์ด๋™๊ฑฐ๋ฆฌ - 1' ๋งŒํผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ๊ธˆ๋ฐฉ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๋ฒ„๋ฆฌ๊ณ  ๋งŒ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์  ํ•˜๋‚˜ํ•˜๋‚˜ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ตœ๋Œ€ ์ตœ์†Œ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐํ•ด์•ผํ•œ๋‹ค. ํ–‰๊ณผ ์—ด ๋ชจ๋‘ ์ตœ๋Œ€์ตœ์†Œ๋ฅผ ๊ณ„์‚ฐํ•ด ์ง์‚ฌ๊ฐํ˜•์ด ์ด๋™ํ•˜๊ฑฐ๋‚˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ™”ํ•˜๋Š” ๋ชจ์Šต์„ ์ƒ์ƒํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

class Solution {
    private final int[] dx = {0, 0, 1, -1}; // ์—ญ์ˆœ ํƒ์ƒ‰์„ ์œ„ํ•ด ์ฟผ๋ฆฌ์˜ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ
    private final int[] dy = {1, -1, 0, 0}; // ์šฐ ์ขŒ ํ•˜ ์ƒ
    
    public long solution(int n, int m, int x, int y, int[][] queries) {
            
        int sr = x; // ์‹œ์ž‘ ๋ฒ”์œ„ ํ–‰ ์ตœ๋Œ€
        int er = x; // ์‹œ์ž‘ ๋ฒ”์œ„ ํ–‰ ์ตœ์†Œ
        int sc = y; // ์‹œ์ž‘ ๋ฒ”์œ„ ์—ด ์ตœ๋Œ€
        int ec = y; // ์‹œ์ž‘ ๋ฒ”์œ„ ์—ด ์ตœ์†Œ
        
        for(int i = queries.length - 1; i >= 0; i--) { // ์ฟผ๋ฆฌ ์—ญ์ˆœ ํƒ์ƒ‰
            int d = queries[i][0];
            int dist = queries[i][1];
            // ํ–‰์ด๋™ ๊ณ„์‚ฐ
            if(d >= 2) {
                int[] result = calRange(sr, er, dx[d]*dist, n);
                if(result[0] == -1) return 0; // ๋ถˆ๊ฐ€๋Šฅ
                sr = result[0];
                er = result[1];
            }
            // ์—ด์ด๋™ ๊ณ„์‚ฐ
            else {
                int[] result = calRange(sc, ec, dy[d]*dist, m);
                if(result[0] == -1) return 0; // ๋ถˆ๊ฐ€๋Šฅ
                sc = result[0];
            ec = result[1];
            }
        }
        
        return (long)(er-sr+1) * (ec-sc+1);
    }
    
    // ๋ฒ”์œ„ ๊ณ„์‚ฐ : ํ•ด๋‹น ๋ฒ”์œ„์—์„œ ์ œํ•œ ๋œ ๋งŒํผ ์ด๋™ ํ•œ ๋ฒ”์œ„
    private int[] calRange(int start, int end, int dist, int max) {
        
        // ๋‹ค์Œ ๋ฒ”์œ„์˜ ์‹œ์ž‘๊ณผ ๋์ด ๊ฒฝ๊ณ„์— ๊ฑธ์น˜๋Š”์ง€ ํ™•์ธ
        int nextS = (start == 0 && dist > 0) ? 0 : start + dist; 
        int nextE = (end == max-1 && dist < 0) ? max - 1 : end + dist;
        
        // 1) ๋ชจ๋‘ ๋ฒ—์–ด๋‚จ
        if((nextS >= max || nextS < 0) && (nextE >= max || nextE < 0)) 
            return new int[] { -1, -1 }; 
        // 2) ์‹œ์ž‘๋งŒ ๋ฒ—์–ด๋‚จ
        else if(nextS < 0 && nextE >= 0 && nextE < max) {
            return new int[] { 0, nextE };
        }
        // 3) ๋๋งŒ ๋ฒ—์–ด๋‚จ
        else if(nextE >= max && nextS >= 0 && nextS < max) {
            return new int[] { nextS, max - 1 };
        }
        // ๋ชจ๋‘ ๊ฐ€๋Šฅ
        else {
            return new int[] { nextS, nextE };
        }
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ์œ„ํ•ด dx, dy๋„ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ €์žฅํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
  • ํ–‰๊ณผ ์—ด์˜ ์ตœ๋Œ€์ตœ์†Œ ๋ณ€์ˆ˜ sr, er, sc, ec๋ฅผ ์‚ฌ์šฉํ•ด ์—ญ์ˆœ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์กฐํšŒํ•ด์„œ ๊ณ„์‚ฐํ•œ๋‹ค.
    • ์ด๋™ ๋ฐฉํ–ฅ์ด 1, 2 ์ด๋ฉด, ํ–‰ ์ด๋™์ด๊ณ , 0, 1์ด๋ฉด, ์—ด ์ด๋™์ด๋‹ค.
    • ์ผ์ง์„ ์ƒ์œผ๋กœ ์ƒ๊ฐํ–ˆ์„๋•Œ ํ–‰ ์—ด ๋ชจ๋‘ ์‹œ์ž‘๊ณผ ๋, ์ด๋™ ๊ฑฐ๋ฆฌ, ์ตœ์†Œ 0๊ณผ ์ตœ๋Œ€ max ๋ผ๋Š” ์กฐ๊ฑด์ด ๊ฐ™์œผ๋ฏ€๋กœ,
      calRange() ๋ฉ”์„œ๋“œ๋ฅผ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๊ฒฐ๊ณผ๊ฐ€ -1์ด ๋‚˜์˜ค๋ฉด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ 0์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • ๊ทธ ์™ธ์—๋Š” ์ตœ๋Œ€ ์ตœ์†Œ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.
  • calRange() ๋ฉ”์„œ๋“œ์—์„œ๋Š” ๋ฒ”์œ„๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
    • ๋จผ์ € ๋‹ค์Œ ์‹œ์ž‘๊ณผ ๋ ์ธ๋ฑ์Šค๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ๋์— ๊ฑธ์ณ์ ธ์„œ ๋ฒ”์œ„๊ฐ€ ์ปค์ง€๋Š” ๊ฒฝ์šฐ๋Š” ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
    • ๊ณ„์‚ฐ๋œ ๋‹ค์Œ ์‹œ์ž‘ ๋ ์ธ๋ฑ์Šค๋ฅผ ๋‹ค์‹œ ์ œํ•œ ๋ฒ”์œ„์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ตœ์ข… ๊ณ„์‚ฐ๋œ ํ–‰์˜ ํฌ๊ธฐ * ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•ด ์ง์‚ฌ๊ฐํ˜• ๋ฒ”์œ„์˜ ๋ฉด์ ์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๋‚œ์ด๋„๊ฐ€ ์•„์ฃผ ์–ด๋ ค์› ๋‹ค. ํ’€์ด์— ์ด 3์‹œ๊ฐ„ ๊ฑธ๋ ธ๊ณ  ์ •๋‹ต ์ฝ”๋“œ๊นŒ์ง€ ๋ณด๊ณ  ํ‘ผ๊ฑฐ๋ผ ์™„ํŒจ๋‹ค...
    • ์ฒซ ๋ฒˆ์งธ๋Š” ๋‹จ์ˆœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด dfs๋กœ ํ’€์—ˆ๋‹ค๊ฐ€ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.
    • ๋ฉ”๋ชจ์ด์ œ์ด์…˜์œผ๋กœ ๊ฐ ์ธ๋ฑ์Šค์— ์ง€๋‚˜๊ฐ„ ์ฟผ๋ฆฌ ๋ช…๋ น์–ด ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.
    • ๊ฒฐ๊ตญ 1์‹œ๊ฐ„์ด ์ง€๋‚˜๊ณ  ํžŒํŠธ๋ฅผ ๋ดค๋Š”๋ฐ, ์—ญ์ˆœ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ฉด ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋งŽ์ด ์ค„์–ด๋“œ๋Š” ๊ฑธ ์•Œ๊ณ  ๋‹ค์‹œ ํ’€์–ด๋ณด์•˜๋‹ค.
    • ํ•˜์ง€๋งŒ ์ ์œผ๋กœ ๊ณ„์‚ฐํ–ˆ์–ด์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๊ณ , ๊ฒฐ๊ตญ ์ •๋‹ต ์ฝ”๋“œ๋ฅผ ๋ณด์•˜๋‹ค.
  • ์ง์‚ฌ๊ฐํ˜• ๋ฉด์˜ ๋ฒ”์œ„๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ผ๊ฑด ์ฒ˜์Œ์ธ ๊ฒƒ ๊ฐ™์•„์„œ ๋งŽ์€ ๊ณต๋ถ€๊ฐ€ ๋˜์—ˆ๋‹ค.
    • ๋งˆ์น˜ ํˆฌํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ 4ํฌ์ธํ„ฐ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค.

728x90