우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»β€πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀
πŸ‘¨πŸ»β€πŸ’» PS/JAVA

λ¬Έμžμ—΄ μˆ˜μ‹ κ³„μ‚°ν•˜λŠ” λ©”μ„œλ“œ λ§Œλ“€κΈ°

πŸ‘¨πŸ»β€πŸ’» PS/JAVA

λ¬Έμžμ—΄ μˆ˜μ‹ κ³„μ‚°ν•˜λŠ” λ©”μ„œλ“œ λ§Œλ“€κΈ°

2023. 8. 1. 11:32

졜근, ν•œ κΈ°μ—…μ—μ„œ 라이브 μ½”ν…Œλ₯Ό λ³΄λŠ”λ° λͺ…ν™•ν•˜κ²Œ ν’€μ§€ λͺ»ν–ˆλ˜ 문제λ₯Ό λ‹€μ‹œ 풀어보렀고 ν•œλ‹€.

쑰건

1. λ¬Έμžμ—΄μ€ 계산할 수 μžˆλŠ” μ‹μœΌλ‘œ μ£Όμ–΄μ§„λ‹€.

2. μˆ«μžλŠ” λͺ¨λ‘ μ–‘μˆ˜λ‘œ μ£Όμ–΄μ§„λ‹€.

3. 연산은 +, -, * 만 μ£Όμ–΄μ§„λ‹€.

 

ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€

1.

μž…λ ₯κ°’ : "20+33-2*5" 

κ²°κ³Ό : 43

 

2. 

μž…λ ₯κ°’ : "5-7*2+3"

κ²°κ³Ό : -6

 

 

풀이

 

μˆ«μžμ™€ μ—°μ‚°μžλ₯Ό λΆ„λ¦¬ν•˜κΈ°

μˆ˜μ‹μ„ κ³„μ‚°ν•˜κΈ° μœ„ν•΄μ„œλŠ” μˆ«μžμ™€ μ—°μ‚°μžλ₯Ό λΆ„λ¦¬ν•˜λŠ” 것이 ν•„μš”ν•˜λ‹€κ³  μƒκ°ν–ˆλ‹€.

 

λ¬Έμžμ—΄μ„ λ‹€λ£¨λŠ”λ° μœ μš©ν•œ μžλ°” μ •κ·œμ‹ 라이브러리λ₯Ό μ‚¬μš©ν•΄μ„œ λΆ„λ¦¬ν•œ λ’€, λ¦¬μŠ€νŠΈμ— λ‹΄λŠ”λ‹€.

 

public int sol(String input) {

        List<String> list = new ArrayList<>();
        Pattern p = Pattern.compile("\\d+|\\D");
        Matcher m = p.matcher(input);

        while (m.find()) {
            String split = m.group();
            list.add(split);
        }

        return result;
    }

 

μ •κ·œμ‹ 뢀뢄은, 숫자 ν˜Ήμ€ μˆ«μžκ°€ μ•„λ‹Œ ν•­λͺ©μ„ μΆ”μΆœν•˜λŠ” 식이닀.

 

μœ„ 과정을 거치면 "20+33-2*5" 이 μž…λ ₯λ˜μ—ˆμ„ λ•Œ,

 

λ¦¬μŠ€νŠΈμ— ["20" , "+" , "33" , "-" , "2" , "*" , "5"] 와 같이 μ±„μ›Œμ§„λ‹€.

 

이제, 연산을 μ°¨λ‘€λŒ€λ‘œ ν•˜λ©΄ 될 것 κ°™μ§€λ§Œ μˆ˜μ‹μ€ κ³±μ…ˆμ΄ μš°μ„ μœΌλ‘œ μ—°μ‚°λ˜μ–΄μ•Ό ν•œλ‹€.

 

λ”°λΌμ„œ, κ³±μ…ˆ 연산을 ν•œλ²ˆ μ²˜λ¦¬ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€. ( 이 뢀뢄을 라이브 μ½”ν…Œμ—μ„œ κ°„κ³Όν–ˆλ‹€κ°€.. λ‹Ήν™©ν–ˆλ‹€..)

 

 public int sol(String input) {

        
        List<String> list = new ArrayList<>();
        Pattern p = Pattern.compile("\\d+|\\D");
        Matcher m = p.matcher(input);

        while (m.find()) {
            String split = m.group();
            list.add(split);
        }

        Stack<String> s = new Stack<>();
        
        for (int i = 0; i < list.size(); i++) {
            if (!s.isEmpty() && s.peek().equals("*")) {
                // * μ—°μ‚°μž 제거
                s.pop();

                // 계산할 수 κ°€μ Έμ˜€κΈ°
                String pop = s.pop();

                // κ³±μ…ˆ 계산 ν›„ λ‹€μ‹œ μŠ€νƒμ— μž…λ ₯
                s.push(String.valueOf(Integer.parseInt(pop) * Integer.parseInt(list.get(i))));
            } else {
                s.push(list.get(i));
            }
        }



        return result;
    }

 

κ³±μ…ˆ 연산은 μŠ€νƒ 자료ꡬ쑰λ₯Ό ν™œμš©ν•˜λ©΄ κ°„λ‹¨ν•˜κ²Œ ν•΄κ²°ν•  수 μžˆλ‹€.

 

λ¦¬μŠ€νŠΈμ— μ €μž₯된 μ›μ†Œλ₯Ό μˆœνšŒν•˜λ‹€κ°€, μŠ€νƒμ— κΌ­λŒ€κΈ°μ— "*" κ°€ μžˆλŠ” 경우

 

"*" 직전에 μŠ€νƒμ— μž…λ ₯λ˜μ—ˆλ˜ μˆ˜μ™€ μž…λ ₯ν•  수λ₯Ό κ³±ν•œλ’€ μž…λ ₯ν•΄μ£Όλ©΄ λœλ‹€.

 

그러면, μŠ€νƒμ€  ["20" , "+" , "33" , "-" , "10" ] 와 같이 κ³±μ…ˆμ΄ κ³„μ‚°λ˜μ–΄ κ³±μ…ˆ μ—°μ‚°μžκ°€ 사라진 μ›μ†Œλ§Œ λ‚¨μ•„μžˆκ²Œ λœλ‹€.

 

 

    public int sol(String input) {

        Stack<String> s = new Stack<>();
        List<String> list = new ArrayList<>();
        Pattern p = Pattern.compile("\\d+|\\D");
        Matcher m = p.matcher(input);

        while (m.find()) {
            String split = m.group();
            list.add(split);
        }

        for (int i = 0; i < list.size(); i++) {
            if (!s.isEmpty() && s.peek().equals("*")) {
                // * μ—°μ‚°μž 제거
                s.pop();

                // 계산할 수 κ°€μ Έμ˜€κΈ°
                String pop = s.pop();

                // κ³±μ…ˆ 계산 ν›„ λ‹€μ‹œ μŠ€νƒμ— μž…λ ₯
                s.push(String.valueOf(Integer.parseInt(pop) * Integer.parseInt(list.get(i))));
            } else {
                s.push(list.get(i));
            }
        }

        int result = Integer.parseInt(s.get(0));

        for (int i = 1; i < s.size(); i += 2) {
            String op = s.get(i);
            switch (op) {
                case "+":
                    result += Integer.parseInt(s.get(i + 1));
                    break;
                case "-":
                    result -= Integer.parseInt(s.get(i + 1));
            }
        }

        return result;
    }

 

이제 μ—°μ‚°μžλ₯Ό μˆœμ„œλŒ€λ‘œ κ³„μ‚°ν•˜λ©΄ λœλ‹€.

 

μž…λ ₯값은 μ •μƒμ μœΌλ‘œ κ³„μ‚°λ˜λŠ” μˆ˜μ‹μ΄ λ“€μ–΄μ˜΄μ„ 보μž₯ν•˜λ―€λ‘œ

 

μ—°μ‚°μžλŠ” μŠ€νƒμ˜ ν™€μˆ˜λ²ˆμ§Έ μΈλ±μŠ€μ— μ‘΄μž¬ν•¨λ„ 보μž₯ν•  수 μžˆλ‹€.

 

λ”°λΌμ„œ, μ—°μ‚°μžμ— 따라 switch 문법을 μ‚¬μš©ν•˜λ˜, if 쑰건문을 ν™œμš©ν•˜λ˜ ν•΄λ‹Ήν•˜λŠ” 연산을 ν•΄μ£Όλ©΄ μ™„λ£Œλœλ‹€.

 

 

  • 쑰건
  • ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€
  • 풀이
'πŸ‘¨πŸ»β€πŸ’» PS/JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [JAVA] λ°±μ€€ 2143번 【G3.두 λ°°μ—΄μ˜ 합】
  • [JAVA] λ°±μ€€ 18869번 【G5.λ©€ν‹°λ²„μŠ€ ⅑】
  • [JAVA] 2021 KAKAO BLIND RECRUITMENT γ€ν•©μŠΉ νƒμ‹œ μš”κΈˆγ€‘
  • [JAVA] 2021 카카였 μ±„μš©μ—°κ³„ν˜• 인턴십 【거리두기 ν™•μΈν•˜κΈ°γ€‘
우규이인우윀
우규이인우윀
개발자 κΏˆλ‚˜λ¬΄

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.