[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - [카카였 인턴] μˆ˜μ‹ μ΅œλŒ€ν™”(C++)

2023. 7. 24. 14:23Β·πŸ–₯️ Study Note/Coding Test

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

문제 μ„€λͺ…

IT 벀처 νšŒμ‚¬λ₯Ό μš΄μ˜ν•˜κ³  μžˆλŠ” λΌμ΄μ–Έμ€ λ§€λ…„ 사내 해컀톀 λŒ€νšŒλ₯Ό κ°œμ΅œν•˜μ—¬ μš°μŠΉμžμ—κ²Œ μƒκΈˆμ„ μ§€κΈ‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이번 λŒ€νšŒμ—μ„œλŠ” μš°μŠΉμžμ—κ²Œ μ§€κΈ‰λ˜λŠ” μƒκΈˆμ„ 이전 λŒ€νšŒμ™€λŠ” λ‹€λ₯΄κ²Œ λ‹€μŒκ³Ό 같은 λ°©μ‹μœΌλ‘œ κ²°μ •ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

해컀톀 λŒ€νšŒμ— μ°Έκ°€ν•˜λŠ” λͺ¨λ“  μ°Έκ°€μžλ“€μ—κ²ŒλŠ” μˆ«μžλ“€κ³Ό 3κ°€μ§€μ˜ μ—°μ‚°λ¬Έμž(+, -, *) 만으둜 이루어진 μ—°μ‚° μˆ˜μ‹μ΄ μ „λ‹¬λ˜λ©°, μ°Έκ°€μžμ˜ λ―Έμ…˜μ€ 전달받은 μˆ˜μ‹μ— ν¬ν•¨λœ μ—°μ‚°μžμ˜ μš°μ„ μˆœμœ„λ₯Ό 자유둭게 μž¬μ •μ˜ν•˜μ—¬ λ§Œλ“€ 수 μžˆλŠ” κ°€μž₯ 큰 숫자λ₯Ό μ œμΆœν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

단, μ—°μ‚°μžμ˜ μš°μ„ μˆœμœ„λ₯Ό μƒˆλ‘œ μ •μ˜ν•  λ•Œ, 같은 μˆœμœ„μ˜ μ—°μ‚°μžλŠ” μ—†μ–΄μ•Ό ν•©λ‹ˆλ‹€. 즉, + > - > * λ˜λŠ” - > * > + λ“±κ³Ό 같이 μ—°μ‚°μž μš°μ„ μˆœμœ„λ₯Ό μ •μ˜ν•  수 μžˆμœΌλ‚˜ +,* > - λ˜λŠ” * > +,-처럼 2개 μ΄μƒμ˜ μ—°μ‚°μžκ°€ λ™μΌν•œ μˆœμœ„λ₯Ό 가지도둝 μ—°μ‚°μž μš°μ„ μˆœμœ„λ₯Ό μ •μ˜ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. μˆ˜μ‹μ— ν¬ν•¨λœ μ—°μ‚°μžκ°€ 2개라면 μ •μ˜ν•  수 μžˆλŠ” μ—°μ‚°μž μš°μ„ μˆœμœ„ 쑰합은 2! = 2가지이며, μ—°μ‚°μžκ°€ 3개라면 3! = 6κ°€μ§€ 쑰합이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

λ§Œμ•½ κ³„μ‚°λœ κ²°κ³Όκ°€ 음수라면 ν•΄λ‹Ή 숫자의 μ ˆλŒ“κ°’μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ μ œμΆœν•˜λ©° μ œμΆœν•œ μˆ«μžκ°€ κ°€μž₯ 큰 μ°Έκ°€μžλ₯Ό 우승자둜 μ„ μ •ν•˜λ©°, μš°μŠΉμžκ°€ μ œμΆœν•œ 숫자λ₯Ό μš°μŠΉμƒκΈˆμœΌλ‘œ μ§€κΈ‰ν•˜κ²Œ λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ°Έκ°€μž 쀑 λ„€μ˜€κ°€ μ•„λž˜μ™€ 같은 μˆ˜μ‹μ„ μ „λ‹¬λ°›μ•˜λ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

"100-200*300-500+20"

일반적으둜 μˆ˜ν•™ 및 μ „μ‚°ν•™μ—μ„œ μ•½μ†λœ μ—°μ‚°μž μš°μ„ μˆœμœ„μ— λ”°λ₯΄λ©΄ λ”ν•˜κΈ°μ™€ λΉΌκΈ°λŠ” μ„œλ‘œ λ™λ“±ν•˜λ©° κ³±ν•˜κΈ°λŠ” λ”ν•˜κΈ°, 빼기에 λΉ„ν•΄ μš°μ„ μˆœμœ„κ°€ λ†’μ•„ * > +,- λ‘œ μš°μ„ μˆœμœ„κ°€ μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

λŒ€νšŒ κ·œμΉ™μ— 따라 + > - > * λ˜λŠ” - > * > + λ“±κ³Ό 같이 μ—°μ‚°μž μš°μ„ μˆœμœ„λ₯Ό μ •μ˜ν•  수 μžˆμœΌλ‚˜ +,* > - λ˜λŠ” * > +,- μ²˜λŸΌ 2개 μ΄μƒμ˜ μ—°μ‚°μžκ°€ λ™μΌν•œ μˆœμœ„λ₯Ό 가지도둝 μ—°μ‚°μž μš°μ„ μˆœμœ„λ₯Ό μ •μ˜ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

μˆ˜μ‹μ— μ—°μ‚°μžκ°€ 3개 μ£Όμ–΄μ‘ŒμœΌλ―€λ‘œ κ°€λŠ₯ν•œ μ—°μ‚°μž μš°μ„ μˆœμœ„ 쑰합은 3! = 6가지이며, κ·Έ 쀑 + > - > * λ‘œ μ—°μ‚°μž μš°μ„ μˆœμœ„λ₯Ό μ •ν•œλ‹€λ©΄ 결괏값은 22,000원이 λ©λ‹ˆλ‹€.

λ°˜λ©΄μ— * > + > - λ‘œ μ—°μ‚°μž μš°μ„ μˆœμœ„λ₯Ό μ •ν•œλ‹€λ©΄ μˆ˜μ‹μ˜ 결괏값은 -60,420 μ΄μ§€λ§Œ, κ·œμΉ™μ— 따라 우승 μ‹œ μƒκΈˆμ€ μ ˆλŒ“κ°’μΈ 60,420원이 λ©λ‹ˆλ‹€.

μ°Έκ°€μžμ—κ²Œ μ£Όμ–΄μ§„ μ—°μ‚° μˆ˜μ‹μ΄ λ‹΄κΈ΄ λ¬Έμžμ—΄ expression이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 우승 μ‹œ 받을 수 μžˆλŠ” κ°€μž₯ 큰 μƒκΈˆ κΈˆμ•‘μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

λ‚΄ 풀이

vector둜 κ΅¬ν˜„ν•˜λ‹€κ°€ vector의 erase의 μ‹œκ°„ λ³΅μž‘λ„κ°€ μ‹ κ²½μ“°μ˜€λ‹€. κ·Έλž˜μ„œ list둜 λ‹€μ‹œ κ΅¬ν˜„ν–ˆλŠ”λ° 랜덀 μ•‘μ„ΈμŠ€κ°€ μ•ˆλ˜λŠ” λΆˆνŽΈν•¨ λ•Œλ¬Έμ— κ²°κ΅­ vector둜 λ‹€μ‹œ λŒμ•„μ™”λ‹€. λ‹€ν–‰νžˆ vector둜 κ΅¬ν˜„ν•΄λ„ μˆ˜μ‹ 길이가 κΈΈμ§€ μ•Šμ•„μ„œμΈμ§€ μ‹œκ°„ μ΄ˆκ³Όκ°€ λ‚˜μ§„ μ•Šμ•˜λ‹€.

#include <string>
#include <vector>

using namespace std;

long long calculate(long long _num1, long long _num2, char _operator)
{
    if (_operator == '+')
        return _num1 + _num2;

    else if (_operator == '-')
        return _num1 - _num2;

    else if (_operator == '*')
        return _num1 * _num2;

    return -1;
}

long long solution(string expression) {
    long long answer = 0;
    vector<char> operators;
    vector<string> operands;
    vector<string> priority = { "+-*", "+*-", "-+*", "-*+", "*+-", "*-+" };

    string cur;
    for (const auto& e : expression)
    {
        if (e >= '0' && e <= '9')
        {
            cur += e;
        }
        else
        {
            operands.emplace_back(cur);
            cur.clear();
            operators.emplace_back(e);
        }
    }
    operands.emplace_back(cur);

    for (const auto& p : priority)
    {
        vector<char> operators_cpy = operators;
        vector<string> operands_cpy = operands;
        for (int i = 0; i < p.size(); ++i)
        {
            char cur_operator = p[i];
            for (int j = 0; j < operators_cpy.size(); ++j)
            {
                if (operators_cpy[j] == cur_operator)
                {
                    operands_cpy[j] = to_string(calculate(stoll(operands_cpy[j]), stoll(operands_cpy[j + 1]), cur_operator));
                    operators_cpy.erase(operators_cpy.begin() + j);
                    operands_cpy.erase(operands_cpy.begin() + j + 1);
                     --j;
                }
            }
        }
        long long result = abs(stoll(operands_cpy[0]));
        answer = answer < result ? result : answer;
    }

    return answer;
}
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'πŸ–₯️ Study Note > Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - ν…Œμ΄λΈ” ν•΄μ‹œ ν•¨μˆ˜(C++)  (0) 2023.07.27
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - κ±°μŠ€λ¦„λˆ(C++)  (0) 2023.07.25
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 연속 λΆ€λΆ„ μˆ˜μ—΄ ν•©μ˜ 개수(C++)  (0) 2023.07.23
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 -ν•˜λ…Έμ΄μ˜ 탑(C++)  (2) 2023.07.22
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - μΊμ‹œ(C++)  (0) 2023.07.20
'πŸ–₯️ Study Note/Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - ν…Œμ΄λΈ” ν•΄μ‹œ ν•¨μˆ˜(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - κ±°μŠ€λ¦„λˆ(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 연속 λΆ€λΆ„ μˆ˜μ—΄ ν•©μ˜ 개수(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 -ν•˜λ…Έμ΄μ˜ 탑(C++)
Beankong_
Beankong_
μ£Όλ‹ˆμ–΄ ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž˜λ¨Έ 곡뢀 기둝
  • Beankong_
    Beankong's Devlog
    Beankong_
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (146)
      • β›… Daily (0)
      • πŸ–₯️ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • 🧭 Devlog (8)
        • μ˜€λ‹΅λ…ΈνŠΈ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • λΈ”λ‘œκ·Έ 메뉴

    • 링크

    • 곡지사항

    • 인기 κΈ€

    • νƒœκ·Έ

      κ²Œμž„ ν”„λ‘œκ·Έλž˜λ°
      ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
      μ•Œκ³ λ¦¬μ¦˜
      cpp
      ν”„λ£Œκ·Έλž˜λ¨ΈμŠ€
      κ²Œμž„ν”„λ‘œκ·Έλž˜λ°
      propertyaccess
      unrealengine module
      μ΅œλ‹¨ 거리 μ•Œκ³ λ¦¬μ¦˜
      그리디(greedy)
      UnrealEngine
      UnrealEngine5
      OnlineSubsystem
      unrealengine build system
      programmers
      ν—¬ν…Œμ΄μ»€
      μ½”λ”©ν…ŒμŠ€νŠΈ
      κ²Œμž„ λͺ¨μž‘
      κ²Œμž„ 개발
      κ·Έλž˜ν”„ 순회
    • 졜근 λŒ“κΈ€

    • 졜근 κΈ€

    • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
    Beankong_
    [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - [카카였 인턴] μˆ˜μ‹ μ΅œλŒ€ν™”(C++)
    μƒλ‹¨μœΌλ‘œ

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