๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(Java)

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_์‚ผ์ด์‚ฌ

by carrot0911 2024. 11. 27.

๋ฌธ์ œ ์„ค๋ช…

https://school.programmers.co.kr/learn/courses/30/lessons/131705

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

ํ•œ๊ตญ์ค‘ํ•™๊ต์— ๋‹ค๋‹ˆ๋Š” ํ•™์ƒ๋“ค์€ ๊ฐ์ž ์ •์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•™๊ต ํ•™์ƒ 3๋ช…์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๋”ํ–ˆ์„ ๋•Œ 0์ด ๋˜๋ฉด 3๋ช…์˜ ํ•™์ƒ์€ ์‚ผ์ด์‚ฌ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 5๋ช…์˜ ํ•™์ƒ์ด ์žˆ๊ณ , ๊ฐ๊ฐ์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ -2, 3, 0, 2, -5์ผ ๋•Œ, ์ฒซ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ, ๋„ค ๋ฒˆ์งธ ํ•™์ƒ์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๋”ํ•˜๋ฉด 0์ด๋ฏ€๋กœ ์„ธ ํ•™์ƒ์€ ์‚ผ์ด์‚ฌ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋‘ ๋ฒˆ์งธ, ๋„ค ๋ฒˆ์งธ, ๋‹ค์„ฏ ๋ฒˆ์งธ ํ•™์ƒ์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๋”ํ•ด๋„ 0์ด๋ฏ€๋กœ ์„ธ ํ•™์ƒ๋„ ์‚ผ์ด์‚ฌ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฒฝ์šฐ ํ•œ๊ตญ์ค‘ํ•™๊ต์—์„œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ผ์ด์‚ฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•œ๊ตญ์ค‘ํ•™๊ต ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด number๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ํ•™์ƒ๋“ค ์ค‘ ์‚ผ์ด์‚ฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • 3 ≤ number์˜ ๊ธธ์ด ≤ 13
  • -1,000 ≤ number์˜ ๊ฐ ์›์†Œ ≤ 1,000
  • ์„œ๋กœ ๋‹ค๋ฅธ ํ•™์ƒ์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

number result
[-2, 3, 0, 2, -5] 2
[-3, -2, -1, 0, 1, 2, 3] 5
[-1, 1, -1, 1] 0

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • ๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • ํ•™์ƒ๋“ค์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ ์Œ  (-3, 0, 3), (-2, 0, 2), (-1, 0, 1), (-2, -1, 3), (-3, 1, 2) ์ด ์‚ผ์ด์‚ฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, 5๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

์‚ผ์ด์‚ฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

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

        // ์„ธ ์ˆซ์ž์˜ ํ•ฉ์ด 0์ธ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ
        for (int i = 0; i < number.length - 2; i++) {
            for (int j = i + 1; j < number.length - 1; j++) {
                for (int k = j + 1; k < number.length; k++) {
                    int sum = number[i] + number[j] + number[k]; // ์„ธ ์ˆซ์ž์˜ ํ•ฉ ๊ณ„์‚ฐ
                    if (sum == 0) {
                        answer++; // ํ•ฉ์ด 0์ด๋ผ๋ฉด ์นด์šดํŠธ ์ฆ๊ฐ€
                    }
                }
            }
        }

        return answer;
    }
}

์ฝ”๋“œ ์„ค๋ช…

  • int answer = 0 : ์„ธ ์ˆซ์ž๋ฅผ ํ•ฉํ•œ ํ›„ 0์ผ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ answer๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.
  • ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด 3๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์„ ํƒํ•œ๋‹ค.
  • for (int i = 0; i < number.length - 2; i++) { } : ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ. ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž์˜ ์œ„์น˜๋ฅผ ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ์ด๋‹ค. 0๋ถ€ํ„ฐ number.length-3๊นŒ์ง€์˜ ๋ฒ”์œ„๋ฅผ ๋ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•ด์•ผ ๋’ค์— ๋‘ ์ˆซ์ž์˜ ์ˆซ์ž๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ์œ ๊ฐ€ ์ƒ๊ธด๋‹ค.
    • for (int j = i+1; i < number.length-1; j++) { } : ๋‘ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ. ๋‘ ๋ฒˆ์งธ ์ˆซ์ž์˜ ์œ„์น˜๋ฅผ ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ์ด๋‹ค. i๋ณด๋‹ค ๋’ค์— ์žˆ๋Š” ์ˆซ์ž๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด์„œ i+1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ๋‘ ์ž๋ฆฌ ์ „๊นŒ์ง€์˜ ๋ฒ”์œ„๋ฅผ ๋ˆ๋‹ค.
      • for (int k = j+1; k < number.length; k++) { } : ์„ธ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ. ์„ธ ๋ฒˆ์งธ ์ˆซ์ž์˜ ์œ„์น˜๋ฅผ ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ์ด๋‹ค. j๋ณด๋‹ค ๋’ค์— ์žˆ๋Š” ์ˆซ์ž๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด์„œ j+1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ๋ฐฐ์—ด์˜ ๋๊นŒ์ง€ ๋ฒ”์œ„๋ฅผ ๋ˆ๋‹ค.
        • int sum = number[i] + number[j] + number[k] : ์„ ํƒ๋œ ์„ธ ์ˆซ์ž์˜ ํ•ฉ์„ ๊ณ„์‚ฐํ•ด์„œ sum์— ์ €์žฅํ•œ๋‹ค.
        • if (sum == 0) { answer++ } : if๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๋งŒ์•ฝ sum์˜ ๊ฐ’์ด 0์ด๋ผ๋ฉด ์„ธ ์ˆซ์ž์˜ ํ•ฉ์ด 0์ด๋ผ๋Š” ๋œป์ด๋ฏ€๋กœ answer๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.