- Today
- Total
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- es6
- 비동기
- error
- deep dive
- 알고리즘
- 웹
- C++
- 모던 자바스크립트
- 네트워크
- React
- js
- git error
- JavaScript
- get
- html
- async
- 자바스크립트
- map
- http
- 상태관리
- 백준 실버
- git
- 그림으로 배우는 http&network
- Java Script
- 에러처리
- 이터러블
- Angular
- 프론트엔드
- 백준
- 모던 자바스크립트 deep dive
Archives
sharingStorage
백준 1541 - 잃어버린 괄호 본문
문제 요약
주어진 식에 괄호를 적절히 쳐서 식의 값을 최소로 만드시오.
가장 처음과 마지막은 숫자이며 두 개 이상의 연산자가 나타나지 않으며 5자리보다 많이 연속되는 숫자는 없다.
접근
1. -뒤에 무조건 괄호를 넣어서 계산한다.
2.1. -가 나오면 괄호를 닫고 그 후 -를 계산한다.
2.2 +가 나오면 괄호를 유지한 채로 큰 수를 만들어 -를 계산한다.
코드
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
string str;
int N;
int main() {
cin >> str;
int result = 0;
string num;
bool isMinus = false; //-기호가 나왔는지 체크
for (int i = 0; i <= str.size(); i++) {
if (str[i] == '+' || str[i] == '-' || i == str.size()) {
if (isMinus) { //연산자가 무엇이든 그 전에 -가 한번 나왔다면 빼기 계산
result -= stoi(num); //int형을 string으로 변환 string 헤더파일필요
num = "";
}
else {
result += stoi(num);
num = "";
}
}
else {
num += str[i];
}
if (str[i] == '-') { //-식이 나오면 isMInum를 true로
isMinus = true;
}
}
cout << result;
return 0;
}
풀이
접근이 비슷하긴 했지만 조금 더 간단하게 정리를 했어야한다. 괄호를 마음대로 칠 수 있는 순간부터 -가 나온 뒤의 +는 모두 -로 바뀐다는 것을 알아차리면 코드를 짜기 수월하다. Greedy 알고리즘을 사용하여 눈 앞에 당장 -가 나온 것부터 생각하며 문제를 풀면 된다.
고찰
처음 접근은 문자열 식에서 괄호를 진짜 넣어야 하나부터 시작해서 굉장히 쉬운 문제를 굳이굳이 어렵게 돌아갈뻔했다.
문제가 원하는 바를 정확히 파악해서 그 결과를 도출해내는 가장 쉬운 방법을 고민해보도록 해야겠다.
'알고리즘' 카테고리의 다른 글
백준 10816 - 숫자카드 2 (0) | 2023.08.18 |
---|---|
백준 18311 - 왕복 (0) | 2023.04.10 |
C++ STL priority_queue 우선순위큐 (0) | 2023.01.10 |
백준 1758 - 알바생강호(c++, Greedy) (3) | 2022.12.03 |
Comments