๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programmers lv-0

๊ฒน์น˜๋Š” ์„ ๋ถ„์˜ ๊ธธ์ด - Java [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ž…๋ฌธ]

by ๊ทคํ”ผํ‚ค 2022. 11. 28.

 

โค๏ธ Problem

๋”๋ณด๊ธฐ
  • ๋ฌธ์ œ
    ๋นจ๊ฐ„์ƒ‰, ์ดˆ๋ก์ƒ‰, ํŒŒ๋ž€์ƒ‰ ์„ ๋ถ„์ด x์ถ• ์œ„์— ์žˆ์Šต๋‹ˆ๋‹ค. ์„ธ ์„ ๋ถ„์˜ x์ขŒํ‘œ ์‹œ์ž‘๊ณผ ๋์ด [[start, end], [start, end], [start, end]] ํ˜•ํƒœ๋กœ ๋“ค์–ด์žˆ๋Š” 2์ฐจ์› ๋ฐฐ์—ด lines๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋‘ ๊ฐœ ์ด์ƒ์˜ ์„ ๋ถ„์ด ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์˜ ๊ธธ์ด๋ฅผreturn ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด๋ณด์„ธ์š”.

    lines๊ฐ€ [[0, 2], [-3, -1], [-2, 1]]์ผ ๋•Œ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

  • ์ œํ•œ ์‚ฌํ•ญ
    • lines์˜ ๊ธธ์ด = 3
    • lines์˜ ์›์†Œ์˜ ๊ธธ์ด = 2
    • ๋ชจ๋“  ์„ ๋ถ„์€ ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ์ž…๋‹ˆ๋‹ค.
    • lines์˜ ์›์†Œ๋Š” [a, b] ํ˜•ํƒœ์ด๋ฉฐ, a, b๋Š” ๊ฐ๊ฐ ์–‘ ๋์  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
    • -100 ≤ a < b ≤ 100

 

  • ์ž…์ถœ๋ ฅ ์˜ˆ & ์„ค๋ช…
no lines result
1 [[0, 1], [2, 5], [3, 9]] 2
2 [[-1, 1], [1, 3], [3, 9]] 0
3 [[0, 5], [3, 9], [1, 10]] 8
  1. ์ดˆ๋ก์ƒ‰๊ณผ ํŒŒ๋ž€์ƒ‰ ์„ ๋ถ„์ด [2, 5], [3, 9]๋กœ [3, 5]๋งŒํผ ๊ฒน์ณ์žˆ์œผ๋ฏ€๋กœ 2๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฒน์นœ ์„ ๋ถ„์ด ์—†์œผ๋ฏ€๋กœ 0์„ return ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋นจ๊ฐ„์ƒ‰๊ณผ ์ดˆ๋ก์ƒ‰ ์„ ๋ถ„ [3, 5]๋ถ€๋ถ„์ด ๊ฒน์นฉ๋‹ˆ๋‹ค.
    ๋นจ๊ฐ„์ƒ‰๊ณผ ํŒŒ๋ž€์ƒ‰ ์„ ๋ถ„ [1, 5]๋ถ€๋ถ„์ด ๊ฒน์นฉ๋‹ˆ๋‹ค.
    ์ดˆ๋ก์ƒ‰๊ณผ ํŒŒ๋ž€์ƒ‰ ์„ ๋ถ„์ด [3, 9]๋ถ€๋ถ„ ๊ฒน์นฉ๋‹ˆ๋‹ค.
    ๋”ฐ๋ผ์„œ 8์„ return ํ•ฉ๋‹ˆ๋‹ค.

 


 

๐Ÿ’› Solution

ํ’€์ด

class Solution {
    public int solution(int[][] lines) {
        int answer = 0;

        int[] line0 = countLines(countDots(lines[0][0], lines[0][1]));
        int[] line1 = countLines(countDots(lines[1][0], lines[1][1]));
        int[] line2 = countLines(countDots(lines[2][0], lines[2][1]));

        for(int i=0; i<line0.length; i++) {
            if(line0[i]+line1[i]+line2[i]>1) {
                answer++;
            }
        }

        return answer;
    }

    public static int[] countDots(int start, int end) {

        int[] cntDots = new int[201];

        for(int i=start+100; i<=end+100; i++) {
            cntDots[i]++;
        }

        return cntDots;
    }


    public static int[] countLines(int[] cntDots) {

        int[] cntLines = new int[200];
        for(int i=1; i<cntDots.length; i++) {
            if(cntDots[i-1]==1 && cntDots[i]==1) {
                cntLines[i-1]++;
            }
        }
        return cntLines;
    }
}

 

์ฒ˜๋ฆฌ์†๋„ Very Good

 


 

๐Ÿ’œ Comment

์ฒ˜์Œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

class Solution {
    public int solution(int[][] lines) {
        int answer = 0;

        int[] cnt = new int[201];
        for(int i=0; i<lines.length; i++) {
            int start = lines[i][0];
            int end = lines[i][1];

            for(int j=start; j<=end; j++) {
                cnt[100+j]++;
            }
        }

        for(int i=1; i<cnt.length; i++) {
//            System.out.println(i+" = "+cnt[i]);
            if(cnt[i-1]>1 && cnt[i]>1) {
                answer++;
            }
        }

        return answer;
    }
}

 

์„ ๋ถ„์ด๋ผ ํ•จ์€ ์ ๋ผ๋ฆฌ์˜ ์—ฐ๊ฒฐ์ด๋‹ˆ, ์ ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ start(a์ )์™€ end(b์ ) ์‚ฌ์ด์˜ ์ˆซ์ž๋ฅผ ์ธ๋ฑ์Šค๋กœ ํ•˜๋Š” ๊ฐ’์— +1์„ ํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ๋งŒ๋“ค์—ˆ๋‹ค.

์—ฌ๊ธฐ์„œ " -100 ≤ a < b ≤ 100 " ๋ผ๋Š” ์กฐ๊ฑด์ด ๊ฑธ๋ ค์žˆ์—ˆ๋‹ค. ์ธ๋ฑ์Šค๋Š” 0๋ณด๋‹ค ํฐ ์ˆ˜๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ -100์„ ์ƒ์‡„ํ•˜๊ธฐ ์œ„ํ•ด a์ ๊ณผ b์  ์‚ฌ์ด์˜ ์ˆซ์ž์— 100์„ ๋”ํ•œ ๊ฐ’์ด ์ธ๋ฑ์Šค๊ฐ€ ๋˜๋„๋ก ๊ตฌ์„ฑํ•˜์˜€๋‹ค. 0๋ถ€ํ„ฐ 200๊นŒ์ง€์˜ ์ˆซ์ž๊ฐ€ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋ฏ€๋กœ int[] cnt = new int[201];๊ฐ€ ๋˜์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‹คํ–‰ํ•ด๋ณด๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ…Œ์ŠคํŠธ 3๋ฒˆ๊ณผ ํ…Œ์ŠคํŠธ 7๋ฒˆ์„ ์‹คํŒจํ•˜๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€

 

๋‚ด๊ฐ€ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„์ด ๋ฌด์—‡์ธ์ง€ ํ•œ์ฐธ ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ, ์˜์™ธ๋กœ ๋ฐ˜๋ก€๋Š” ๋ฌธ์ œ ์„ค๋ช…์— ๋“ค์–ด์žˆ์—ˆ๋‹ค.

lines๊ฐ€ [[0, 2], [-3, -1], [-2, 1]]์ผ ๋•Œ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋ณด๋ฉด [-3, -1]๋Š” ์ข…๋ฃŒ์ ์ด -1์ด๊ณ  [0, 2]๋Š” ์‹œ์ž‘์ ์ด 0์ด๋‹ค. ๋‚ด๊ฐ€ ์ฒ˜์Œ ๊ตฌ์ƒํ•œ๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๊ฒŒ๋˜๋ฉด ์ ๋งˆ๋‹ค +1์„ ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ -1๊ณผ 0์— 1์ด ์ถ”๊ฐ€๋˜๋ฏ€๋กœ ์„ ๋ถ„์ด ์•„๋‹Œ ๊ฒƒ์ด ๋งˆ์น˜ ์„ ๋ถ„์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์ผ์–ด๋‚œ ๊ฒƒ์ด๋‹ค!


for๋ฌธ์œผ๋กœ cnt[i]๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋ฉด 99๋ฒˆ์งธ์™€ 100๋ฒˆ์งธ๊ฐ€ ๊ฐ๊ฐ ์„œ๋กœ ๋‹ค๋ฅธ ์„ ๋ถ„์˜ ์ข…๋ฃŒ์ ๊ณผ ์‹œ์ž‘์ ์ธ๋ฐ๋„ ๊ตฌ๋ถ„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. cnt[i-1]>1 && cnt[i]>1๋ผ๋Š” ์กฐ๊ฑด๋งŒ์œผ๋กœ๋Š” ์„ ๋ถ„์ธ์ง€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ๋‹ค. ์‚ฌ์‹ค ์˜๋ฏธ ์ž์ฒด๋Š” ์—ฐ์†๋œ ์ ์˜ ๊ฐ’์ด ๊ฐ๊ฐ 1์ด์ƒ์ธ์ง€์— ์ง€๋‚˜์ง€ ์•Š์•˜์œผ๋‹ˆ๊นŒ.

๊ทธ๋ž˜์„œ ํ’€์ด์— ์“ด ๋ฐฉ์‹์€ ์ ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ ๋‹ค์Œ์— ์„ ๋ถ„์œผ๋กœ ์น˜ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋‹ค.

๋จผ์ € countDots ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ธ์ˆ˜๋กœ ๊ฐ ์„ ๋ถ„์˜ ์‹œ์ž‘์ ๊ณผ ์ข…๋ฃŒ์ ์„ ์ „๋‹ฌํ•˜๋ฉด ๊ทธ ๊ฐ’์— 100์„ ๋”ํ•œ ๋’ค, ํ•ด๋‹น ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ์ˆซ์ž๋ฅผ ์ธ๋ฑ์Šค๋กœ ํ•˜๋Š” ๋ฐฐ์—ด cntDots์˜ ๊ฐ’์— 1์„ ๋”ํ•˜๋„๋ก(cntDots[i]++;) ๋งŒ๋“ค์—ˆ๋‹ค. ์ด๋•Œ, ๋ฐฐ์—ด์€ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์„ ๋ถ„๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ง„๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์ ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ ์ด์ „ ์ฝ”๋“œ์™€ ๋™์ผํ•ด๋ณด์ธ๋‹ค. ๋‹ค๋ฅธ ์ ์€ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์— ๊ทธ ๊ฐ’์„ ๋ˆ„์ ํ•˜๋Š” ๋ฐฉ์‹์„ ํƒํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ์ ์ด๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ์— countLines ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฐ ์„ ๋ถ„์˜ ์  ๋ฐฐ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ " cnt[i-1]==1 && cnt[i]==1 "์ธ ๊ฒฝ์šฐ์— ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๋ฐฐ์—ด์˜ i-1์ธ๋ฑ์Šค์˜ ๊ฐ’์ด 1์”ฉ ์ฆ๊ฐ€ํ•˜๋„๋ก(cntLines[i-1]++;) ๊ตฌํ˜„ํ–ˆ๋‹ค. ์—ฌ๊ธฐ์„œ cntLines[i-1]์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” "์‹œ์ž‘์ ์„ cnt[i-1]๋กœ ๊ฐ€์ง€๋Š” ๊ธธ์ด๊ฐ€ 1์ธ ์„ ๋ถ„"์ด๋‹ค. ์ œ์‹œ๋œ ์„ ๋ถ„ ํ•˜๋‚˜๋ฅผ ์‹œ์ž‘์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ธธ์ด๋ฅผ 1๋กœ ๊ฐ€์ •ํ•˜์—ฌ ๋™๊ฐ•๋™๊ฐ• ์ž˜๋ผ๋‘” ๊ฒƒ.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ lines0[i]+lines1[i]+lines2[i]ํ•œ ๊ฐ’์ด 1๋ณด๋‹ค ํฌ๋ฉด ๊ฒน์ณ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ answer++;๋ฅผ ์ˆ˜ํ–‰ํ•ด์ฃผ๋ฉด ๋!!

 

8์ !!!!!!!!! ๊ณ ์ƒํ•œ ๋ณด๋žŒ์ด ์žˆ๋‹ค ํ—ฟโค ํ˜„์žฌ ์ˆœ์œ„ 12216์œ„ ๐Ÿ’ช

 

 

 

๋Œ“๊ธ€