코딩 정복 가즈아~
Home
  • 분류 전체보기 (159)
    • 알고리즘 풀이 (149)
      • 프로그래머스 (89)
      • 백준 (59)
    • 취준 일기 (6)
    • 네트워크 정리 (1)
Home
  • 분류 전체보기 (159)
    • 알고리즘 풀이 (149)
      • 프로그래머스 (89)
      • 백준 (59)
    • 취준 일기 (6)
    • 네트워크 정리 (1)
블로그 내 검색

코딩 정복 가즈아~

(っ◔◡◔)っ ♥ 2021 취뽀하자!! ♥

  • 알고리즘 풀이/백준

    [1874] 백준 알고리즘 : 스택 수열(C++)

    2019. 11. 20.

    by. 데롱디롱

    728x90

    https://www.acmicpc.net/problem/1874

    문제 자체가 이해되지않아, 힘든 문제였다.ㅜㅜ

    첫 줄 : 입력 개수(n)
    다음 줄 ~ 끝 : 원하는 숫자 순서

    스택에 1~n까지 순서대로 숫자가 입력되는데, 이를 처리하여 입력한 순서대로 push(), pop()하면 되는 문제였다.

    들어온 숫자가 num, 1~n까지를 t로 제어할때
    num > t 이면, 일단 계속 push()
    num==t 이면, push()하고 pop()
    num < t 이면, num이 이미 스택에 넣어진 숫자라는 뜻이기 때문에
    스택의 top()숫자와 같으면 pop() 아니면 더 깊숙히 있는 숫자라 꺼낼 수 없어 NO를 출력하고 끝낸다.
    (NO인지 여부는 end로 제어한다.)

    #include <iostream>
    #include <stack>
    #include<vector>
    using namespace std;
    
    int main()
    {
    	int n = 0;
    	cin >> n;
    	cin.ignore();
    
    	int t = 1;				// 1~n
    	int num = 0;			// 입력한 수
    	stack<int> st;
    	bool end = false;		// 중간에 NO가 나오면 끝내기
    	vector<char> result;	// 출력결과 저장
    
    	for (int i = 0; i < n; i++)
    	{
    		cin >> num;
    		while (1)
    		{
    			if (num > t)
    			{
    				st.push(t);
    				t++;
    				result.push_back('+');
    			}
    			else if (num == t)
    			{
    				st.push(t);
    				t++;
    				result.push_back('+');
    				st.pop();
    				result.push_back('-');
    				break;
    			}
    			else
    			{
    				if (st.top() == num)
    				{
    					st.pop();
    					result.push_back('-');
    				}
    				else
    				{
    					cout << "NO";
    					end = true;
    				}
    				break;
    			}
    		}
    		if (end == true) break;
    	}
    	if(end == false)
    		for (int k = 0; k < result.size(); k++)
    		{
    			cout << result[k] << "\n";
    		}
    
    	return 0;
    }

    그런데, 처음에 돌렸을때에는 시간초과가 떴었다 ㅜㅜ
    검색결과 cout 할 때, endl은 시간을 굉장히 많이 잡아먹는 아이여서 그렇다고 한다.

    cout << endl; 대신에 cout << "\n";으로 수정하니까 성공 ^◇^

     

     

    1874번: 스택 수열

    1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

    www.acmicpc.net

     

    저작자표시 (새창열림)

    '알고리즘 풀이 > 백준' 카테고리의 다른 글

    [2941] 백준 : 크로아티아 알파벳(C++)  (0) 2020.04.24
    [10845] 백준 알고리즘 : 큐(C++)  (0) 2019.11.20
    [9012] 백준 알고리즘 : 괄호(C++)  (0) 2019.11.20
    [9093] 백준 알고리즘 : 단어 뒤집기(C++)  (0) 2019.11.19
    [10828] 백준 알고리즘 : 스택(C++) - 공부후  (0) 2019.11.15

    댓글

    관련글

    • [2941] 백준 : 크로아티아 알파벳(C++) 2020.04.24
    • [10845] 백준 알고리즘 : 큐(C++) 2019.11.20
    • [9012] 백준 알고리즘 : 괄호(C++) 2019.11.20
    • [9093] 백준 알고리즘 : 단어 뒤집기(C++) 2019.11.19
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

피할 수 없다면, 순간을 즐겨라

Designed by Nana
블로그 이미지
데롱디롱
희희.. (๑′ᴗ‵๑)

티스토리툴바