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

๋‹คํ•ญ์‹ ๋”ํ•˜๊ธฐ - Java [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ž…๋ฌธ]

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

 

โค๏ธ Problem

๋”๋ณด๊ธฐ
  • ๋ฌธ์ œ
    ํ•œ ๊ฐœ ์ด์ƒ์˜ ํ•ญ์˜ ํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์‹์„ ๋‹คํ•ญ์‹์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹คํ•ญ์‹์„ ๊ณ„์‚ฐํ•  ๋•Œ๋Š” ๋™๋ฅ˜ํ•ญ๋ผ๋ฆฌ ๊ณ„์‚ฐํ•ด ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ง์…ˆ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋‹คํ•ญ์‹ polynomial์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋™๋ฅ˜ํ•ญ๋ผ๋ฆฌ ๋”ํ•œ ๊ฒฐ๊ด๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด๋ณด์„ธ์š”. ๊ฐ™์€ ์‹์ด๋ผ๋ฉด ๊ฐ€์žฅ ์งง์€ ์ˆ˜์‹์„ return ํ•ฉ๋‹ˆ๋‹ค.

 

  • ์ œํ•œ ์‚ฌํ•ญ
    • 0 < polynomial์— ์žˆ๋Š” ์ˆ˜ < 100
    • polynomial์— ๋ณ€์ˆ˜๋Š” 'x'๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
    • polynomial์€ 0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ •์ˆ˜, ๊ณต๋ฐฑ, ‘x’, ‘+'๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ•ญ๊ณผ ์—ฐ์‚ฐ๊ธฐํ˜ธ ์‚ฌ์ด์—๋Š” ํ•ญ์ƒ ๊ณต๋ฐฑ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
    • ๊ณต๋ฐฑ์€ ์—ฐ์†๋˜์ง€ ์•Š์œผ๋ฉฐ ์‹œ์ž‘์ด๋‚˜ ๋์—๋Š” ๊ณต๋ฐฑ์ด ์—†์Šต๋‹ˆ๋‹ค.
    • ํ•˜๋‚˜์˜ ํ•ญ์—์„œ ๋ณ€์ˆ˜๊ฐ€ ์ˆซ์ž ์•ž์— ์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    • " + 3xx + + x7 + "์™€ ๊ฐ™์€ ์ž˜๋ชป๋œ ์ž…๋ ฅ์€ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • "012x + 001"์ฒ˜๋Ÿผ 0์„ ์ œ์™ธํ•˜๊ณ ๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    • ๋ฌธ์ž์™€ ์ˆซ์ž ์‚ฌ์ด์˜ ๊ณฑํ•˜๊ธฐ๋Š” ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
    • polynomial์—๋Š” ์ผ์ฐจ ํ•ญ๊ณผ ์ƒ์ˆ˜ํ•ญ๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
    • ๊ณ„์ˆ˜ 1์€ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฒฐ๊ด๊ฐ’์— ์ƒ์ˆ˜ํ•ญ์€ ๋งˆ์ง€๋ง‰์— ๋‘ก๋‹ˆ๋‹ค.
    • 0 < polynomial์˜ ๊ธธ์ด < 50

 

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

no polynomial result
1 "3x + 7 + x" "4x + 7"
2 "x + x + x" "3x"
  1. "3x + 7 + x"์—์„œ ๋™๋ฅ˜ํ•ญ๋ผ๋ฆฌ ๋”ํ•˜๋ฉด "4x + 7"์ž…๋‹ˆ๋‹ค.
  2. "x + x + x"์—์„œ ๋™๋ฅ˜ํ•ญ๋ผ๋ฆฌ ๋”ํ•˜๋ฉด "3x"์ž…๋‹ˆ๋‹ค.

 


 

๐Ÿ’› Solution

ํ’€์ด

class Solution {
    public String solution(String polynomial) {
        String[] trans = polynomial.split(" \\+ ");

        int calcX = 0;
        int calcNum = 0;
        for(int i=0; i<trans.length; i++) {
            trans[i] = trans[i].trim();
            if(trans[i].contains("x")) {
                if(trans[i].contentEquals("x")) {
                    trans[i] = trans[i].replace("x", "1");
                    calcX += Integer.parseInt(trans[i]);
                } else {
                    trans[i] = trans[i].replace("x", "");
                    calcX += Integer.parseInt(trans[i]);
                }
            } else {
                calcNum += Integer.parseInt(trans[i]);
            }
        }

        StringBuilder sb = new StringBuilder();
        if (calcX == 0) {
            sb.append(Integer.valueOf(calcNum));
        } else if(calcNum == 0) {
            if (calcX == 1) {
                sb.append("x");
            } else {
                sb.append(Integer.valueOf(calcX)+"x");
            }
        } else {
            if (calcX == 1) {
                sb.append("x + "+Integer.valueOf(calcNum));
            } else {
                sb.append(Integer.valueOf(calcX)+"x + "+Integer.valueOf(calcNum));
            }
        }

        return sb.toString();
    }
}

 

์ฒ˜๋ฆฌ์†๋„๋Š” ํŽธ์ฐจ๊ฐ€ ํฌ๋‹ค.. ๋ณด์™„์ด ๋งค์šฐ ํ•„์š”โ˜…โ˜…

 




๐Ÿ’œ Comment

ํ•˜ ์ด ๋ฌธ์ œ๋Š” ์ง„์งœ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค. ํ…Œ์ŠคํŠธ 10๋ฒˆ์ด ๊ณ„์† ํ†ต๊ณผ๋˜์ง€ ์•Š์•„์„œ ๊ณ ์ƒํ•œ ๋ฌธ์ œ..๐Ÿคฃ

ํ…Œ์ŠคํŠธ 10๋ฒˆ์ด ํ†ต๊ณผ๋˜์ง€ ์•Š์•˜์„ ๋•Œ์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

class Solution {
    public String solution(String polynomial) {
        String[] trans = polynomial.split(" \\+ ");

        int calcX = 0;
        int calcNum = 0;
        for(int i=0; i<trans.length; i++) {
            trans[i] = trans[i].trim();
            if(trans[i].contains("x")) {
                if(trans[i].contentEquals("x")) {
                    trans[i] = trans[i].replace("x", "1");
                    calcX += Integer.parseInt(trans[i]);
                } else {
                    trans[i] = trans[i].replace("x", "");
                    calcX += Integer.parseInt(trans[i]);
                }
            } else {
                calcNum += Integer.parseInt(trans[i]);
            }
        }

        StringBuilder sb = new StringBuilder();
        if (calcNum == 0) {
            sb.append(Integer.valueOf(calcX)+"x");
        } else if(calcX == 0) {
            sb.append(Integer.valueOf(calcNum));
        } else if (calcX == 1){
            sb.append("x + "+Integer.valueOf(calcNum));
        } else {
            sb.append(Integer.valueOf(calcX)+"x + "+Integer.valueOf(calcNum));
        }

        return sb.toString();
    }
}

 

calcX๊ฐ€ 1์ผ ๋•Œ๋ฅผ calcNum์ด 0์ผ๋•Œ์™€ ์•„๋‹ ๋•Œ์— ๊ฐ๊ฐ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ณ€์ˆ˜ x์˜ ๊ณ„์ˆ˜๊ฐ€ 1์ธ ๊ฒฝ์šฐ์—๋Š” "1x"๊ฐ€ ์•„๋‹Œ "x"๋กœ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฐ๊ฐ ๊ณ ๋ ค๋ฅผ ํ•ด์•ผํ•œ๋‹ค. (์ œํ•œ ์กฐ๊ฑด : ๊ณ„์ˆ˜ 1์€ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.)

String[] trans = polynomial.split(" \+ "); ์ด ์ฝ”๋“œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ํ•œ ๋ฒˆ ๋‚ฌ์—ˆ๋‹ค.
์ฒ˜์Œ์—๋Š” String[] trans = polynomial.split("+"); ์œผ๋กœ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ,

 


Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0 ์ด๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๊ฒ€์ƒ‰์„ ํ•ด๋ณด๋‹ˆ, .split("") ์•ˆ์— ํŠน์ˆ˜๋ฌธ์ž("+")๋ฅผ ์ง‘์–ด๋„ฃ์œผ๋ฉด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ๊ทธ ์ด์œ ๋Š” +, ^, *, "์™€ ๊ฐ™์€ ํŠน์ˆ˜๋ฌธ์ž๋Š” ์ •๊ทœํ‘œํ˜„์‹์—์„œ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ํŠน์ˆ˜ ๊ธฐ๋Šฅ์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ˆ˜๋ฌธ์ž ๊ทธ ์ž์ฒด๋ฅผ ์ง€์นญํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” escape ๋ฌธ์ž์ธ ์—ญ์Šฌ๋ž˜์‹œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ด ๊ฒฝ์šฐ escape ๋ฌธ์ž์ธ ์—ญ์Šฌ๋ž˜์‹œ ๋‘๊ฐœ(\)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๋˜๋Š” "[+]"์ฒ˜๋Ÿผ ๋Œ€๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๋„ ์ž˜ ํ•ด๊ฒฐ์ด ๋œ๋‹ค. (๊ฒ€์ฆ ์™„๋ฃŒ)

์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ํŽธ์ฐจ ์—†์ด ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„๊นŒ,, ๊ณ ๋ฏผ ์ค‘๐Ÿค”

 

15์ !!!!!!!!! ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ ์ˆ˜๋ฅผ ๋งŽ์ด ์ฃผ๋Š” ๊ฑด ์–ธ์ œ๋‚˜ ์˜ณ๋‹ค๐Ÿคฃ

 


 

๐Ÿค Concept

Escape character (์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž)

  • Escape sequence ๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ์—ญ์Šฌ๋ž˜์‹œ() ๊ธฐํ˜ธ๊ฐ€ ๋ถ™์–ด ํŠน์ˆ˜ํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฌธ์ž ๋ฆฌํ„ฐ๋Ÿด
  • ๋ฌธ์ž์—ด ์•ˆ์—์„œ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š๊ณ , ํŠน๋ณ„ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ์—ญ์Šฌ๋ž˜์‹œ(\)๋ฅผ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๊ณ ์žํ•œ๋‹ค๋ฉด ์—ญ์Šฌ๋ž˜์‹œ ๋‘๊ฐœ๋ฅผ ์จ์•ผํ•œ๋‹ค
    → ์—ญ์Šฌ๋ž˜์‹œ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด์ง€ ํ—ท๊ฐˆ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ

 

type meaning
' ํ™‘๋”ฐ์˜ดํ‘œ ๋ชจ์–‘ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ
" ์Œ๋”ฐ์˜ดํ‘œ ๋ชจ์–‘ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ
\t ํƒญ๋ฌธ์ž
\n ์ค„๋ฐ”๊ฟˆ (๊ฐœํ–‰, new line)
\ (์—ญ์Šฌ๋ž˜์‹œ 2๊ฐœ) ์—ญ์Šฌ๋ž˜์‹œ ๋ชจ์–‘ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ
\b ํ•œ ๋ฌธ์ž ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ (๋ฐฑ์ŠคํŽ˜์ด์Šค)
\r ๊ฐ™์€ ์ค„์˜ ๋งจ ์•ž์œผ๋กœ ์ปค์„œ ์ด๋™ (Carriage return, ๋งจ ์™ผ์ชฝ์œผ๋กœ ์ด๋™)
\f ํ”„๋ฆฐํ„ฐ์—์„œ ๊ฐ•์ œ์ ์œผ๋กœ ๋‹ค์Œ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ ์‚ฌ์šฉ (Form feed)
\0 null ๋ฌธ์ž ์ถœ๋ ฅ
  • Java์—์„œ๋Š” ์ƒ์œ„ 5๊ฐœ ์ •๋„๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ๋‚˜๋จธ์ง€๋Š” C์–ธ์–ด๋‚˜ C++์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋“ฏํ•˜๋‹ค.

 

 

 

๋Œ“๊ธ€