cpp(14)
-
[백준] 10799 | 쇠막대기 | C++
풀이의 핵심은 이렇다. 입력으로 주어진 문자열을 하나씩 순서대로 처리한다: 만약 ( 이라면: 막대기의 시작을 알리는 것이다. stack에 넣는다; 만약 ) 이라면: stack pop; stack의 top(가장 최근에 넣은 값)이 ( 이라면: 레이저로 인해 조각들이 생겼다. 생겨난 조각 수(stack의 size)만큼 결과값에 더한다; stack의 top(가장 최근에 넣은 값)이 ) 이라면: 조각의 끝을 알리는 것이다. 결과값에 하나를 더한다; 위의 그림과 함께 보면 의사코드의 이해에 도움이 될 것이다. 주의할 점은, ) 을 처리하려는데 이전에 ( 이 들어왔다면, 막대기가 아닌 레이저이므로 미리 stack에서 pop시켜야 한다. 그래야 조각 수를 올바르게 더할 수 있다. ) 을 처리하려는데 이전에도 ) 이 ..
2022.07.15 -
[백준] 2812 | 크게 만들기 | C++
내가 생각한 풀이의 핵심은 이렇다. 입력으로 주어진 숫자를 하나씩 순서대로 처리한다: 만약 i번째 수 > stack의 top이라면: stack pop; k 하나 감소; i번째 수를 stack에 넣는다; 이후 k가 남아있을 수 있으니, k가 0이 될 때까지 stack을 pop시켜야 한다. (나중에 다른 사람의 풀이를 통해 알게 되었다.) 그리고 stack에 담긴 수를 역순으로 꺼내서 답을 조합하였다. 그런데 stack으로 풀면 시간 초과가 났다. 그래서 vector로 대신하여 풀었더니 맞았습니다!!가 나왔다. (왜 이런지는 잘 모르겠다.) 정답 소스코드 - vector를 이용한 풀이 #include #include using namespace std; int main() { ios::sync_with_st..
2022.07.15