반응형

문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/120902
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✅ 문제 설명
주어진 문자열 my_string은 "3 + 5" 같은 형식의 수식입니다.
- 문자열에 포함된 연산자는 +(더하기), -(빼기)만 존재합니다.
- my_string을 계산한 결과값을 반환해야 합니다.
- 숫자와 연산자는 공백 하나로 구분되어 있으며, 잘못된 수식은 주어지지 않습니다.
🔍 입출력 예시
my_string 결과
"3 + 4" | 7 |
"10 - 2" | 8 |
"15 + 5 - 3" | 17 |
🛠 문제 해결 과정
1️⃣ 문자열을 수식으로 변환
- 주어진 my_string을 공백을 기준으로 나눈다.
- 연산자와 숫자를 순차적으로 처리하면서 계산을 진행한다.
- +일 경우 더하고, -일 경우 빼면서 최종 결과를 구한다.
예제 1: "3 + 4"
- 공백을 기준으로 나누면 ['3', '+', '4']
- 첫 번째 숫자 3을 결과값으로 저장
- + 연산자를 만나면 다음 숫자를 더함 → 3 + 4 = 7
🔹 결과: 7
예제 2: "15 + 5 - 3"
- 공백을 기준으로 나누면 ['15', '+', '5', '-', '3']
- 첫 번째 숫자 15를 결과값으로 저장
- + 5 연산 → 15 + 5 = 20
- - 3 연산 → 20 - 3 = 17
🔹 결과: 17
🔥 최적화된 해결 방법
def solution(my_string):
tokens = my_string.split() # 공백을 기준으로 숫자와 연산자를 분리
result = int(tokens[0]) # 첫 번째 숫자를 결과값으로 설정
for i in range(1, len(tokens), 2): # 연산자와 숫자를 순차적으로 처리
operator = tokens[i]
number = int(tokens[i + 1])
if operator == '+':
result += number
elif operator == '-':
result -= number
return result
📌 코드 설명
- split()을 사용하여 공백을 기준으로 수식을 나눕니다.
- 첫 번째 숫자를 result에 저장합니다.
- 짝수 인덱스는 연산자, 홀수 인덱스는 숫자이므로 for문을 사용해 2칸씩 이동하며 연산을 수행합니다.
- +이면 더하고, -이면 빼면서 최종 값을 반환합니다.
📌 실행 예제 및 결과
print(solution("3 + 4")) # 7
print(solution("10 - 2")) # 8
print(solution("15 + 5 - 3")) # 17
✅ 출력 결과:
7
8
17
🔑 핵심 정리
개념 설명
문자열 분리 | split()을 사용하여 공백을 기준으로 연산자와 숫자를 분리 |
연산자 순차 처리 | +이면 더하고, -이면 빼면서 최종 값을 구함 |
반복문 활용 | for문을 사용해 연산자-숫자 쌍을 처리 |
시간 복잡도 | O(N), 문자열을 한 번 순회하며 계산 |
반응형
'IT > algorithm' 카테고리의 다른 글
[programmers] '한 번만 등장한 문자' 문제 해설 및 정답코드 (0) | 2025.03.19 |
---|---|
[Python] 알고리즘 개념20 - 이진 탐색(Binary Search) (1) | 2025.02.28 |
[Python] 알고리즘 개념19 - 정렬 알고리즘 (퀵 정렬, 병합 정렬, 힙 정렬) (0) | 2025.02.27 |
[Python] 알고리즘 개념18 - 분할 정복(Divide and Conquer) (1) | 2025.02.27 |
[Python] 알고리즘 개념17 - 완전 탐색(Brute Force) (0) | 2025.02.27 |
[Python] 알고리즘 개념16 - 그리디 알고리즘(Greedy Algorithm) (0) | 2025.02.27 |
[Python] 알고리즘 개념15 퀴즈 - 세그먼트 트리 (0) | 2025.02.24 |
[Python] 알고리즘 개념15 - 세그먼트 트리(Segment Tree) (0) | 2025.02.24 |
댓글