ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€(BOJ) 1874번] μŠ€νƒ μˆ˜μ—΄ (C++)
    PS(Problem Solving)/C++ 2022. 1. 16. 22:56
    λ°˜μ‘ν˜•

    문제 링크

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

     

    문제 정보

    μž…λ ₯

    첫 쀄에 n (1 ≤ n ≤ 100,000)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 n개의 μ€„μ—λŠ” μˆ˜μ—΄μ„ μ΄λ£¨λŠ” 1이상 nμ΄ν•˜μ˜ μ •μˆ˜κ°€ ν•˜λ‚˜μ”© μˆœμ„œλŒ€λ‘œ 주어진닀. λ¬Όλ‘  같은 μ •μˆ˜κ°€ 두 번 λ‚˜μ˜€λŠ” 일은 μ—†λ‹€.

    좜λ ₯

    μž…λ ₯된 μˆ˜μ—΄μ„ λ§Œλ“€κΈ° μœ„ν•΄ ν•„μš”ν•œ 연산을 ν•œ 쀄에 ν•œ κ°œμ”© 좜λ ₯ν•œλ‹€. push연산은 +둜, pop 연산은 -둜 ν‘œν˜„ν•˜λ„λ‘ ν•œλ‹€. λΆˆκ°€λŠ₯ν•œ 경우 NOλ₯Ό 좜λ ₯ν•œλ‹€.

     

    풀이

     κ΅‰μž₯히 ν•΄κ²°ν•˜κΈ° μ–΄λ €μš΄ λ¬Έμ œμ˜€λ‹€. 예제 1λ²ˆμ„ 보고 문제λ₯Ό μ΄ν•΄ν•΄λ³΄μž.

     

     8 4 3 6 8 7 5 2 1 을 μž…λ ₯ν–ˆλ‹€κ³  ν•˜μž. λ”°λΌμ„œ μ²˜μŒμ— 4λ₯Ό μˆ˜μ—΄μ— λ„£μ–΄μ•Ό ν•œλ‹€. κ·Έ 과정은 μ•„λž˜μ™€ κ°™λ‹€.

    1.  1 2 3 4λ₯Ό μŠ€νƒμ— push ν•œλ‹€.
    2.  μŠ€νƒμ—μ„œ 4λ₯Ό pop ν•΄μ„œ μˆ˜μ—΄μ— λ„£λŠ”λ‹€. (μŠ€νƒμ—λŠ” 1 2 3이 λ‚¨λŠ”λ‹€.)

    그리고 3을 μˆ˜μ—΄μ— λ„£μ–΄μ•Ό ν•œλ‹€. 

    1.  μŠ€νƒμ—μ„œ 3을 pop ν•΄μ„œ μˆ˜μ—΄μ— λ„£λŠ”λ‹€. (μŠ€νƒμ—λŠ” 1 2κ°€ λ‚¨λŠ”λ‹€.)

    κ·Έ λ‹€μŒμ— 6을 μˆ˜μ—΄μ— λ„£μ–΄μ•Ό ν•œλ‹€.

    1.  5 6을 μŠ€νƒμ— push ν•œλ‹€.
    2.  μŠ€νƒμ—μ„œ 6을 pop ν•΄μ„œ μˆ˜μ—΄μ— λ„£λŠ”λ‹€. (μŠ€νƒμ—λŠ” 1 2 5κ°€ λ‚¨λŠ”λ‹€.)

    그리고 8을 μˆ˜μ—΄μ— λ„£μ–΄μ•Ό ν•œλ‹€.

    1.  7 8을 μŠ€νƒμ— push ν•œλ‹€.
    2.  μŠ€νƒμ—μ„œ 8을 pop ν•΄μ„œ μˆ˜μ—΄μ— λ„£λŠ”λ‹€. (μŠ€νƒμ—λŠ” 1 2 5 7이 λ‚¨λŠ”λ‹€.)

    κ·Έ λ‹€μŒμ— 7을 μˆ˜μ—΄μ— λ„£μ–΄μ•Ό ν•œλ‹€.

    1.  μŠ€νƒμ—μ„œ 7을 pop ν•΄μ„œ μˆ˜μ—΄μ— λ„£λŠ”λ‹€. (μŠ€νƒμ—λŠ” 1 2 5κ°€ λ‚¨λŠ”λ‹€.)

    그리고 5λ₯Ό μˆ˜μ—΄μ— λ„£μ–΄μ•Ό ν•œλ‹€.

    1.  μŠ€νƒμ—μ„œ 5λ₯Ό pop ν•΄μ„œ μˆ˜μ—΄μ— λ„£λŠ”λ‹€. (μŠ€νƒμ—λŠ” 1 2κ°€ λ‚¨λŠ”λ‹€.)

    κ·Έ λ‹€μŒμ— 2λ₯Ό μˆ˜μ—΄μ— λ„£μ–΄μ•Ό ν•œλ‹€.

    1.  μŠ€νƒμ—μ„œ 2λ₯Ό pop ν•΄μ„œ μˆ˜μ—΄μ— λ„£λŠ”λ‹€. (μŠ€νƒμ—λŠ” 1이 λ‚¨λŠ”λ‹€.)

    그리고 1을 μˆ˜μ—΄μ— λ„£μ–΄μ•Ό ν•œλ‹€.

    1.  μŠ€νƒμ—μ„œ 1을 pop ν•΄μ„œ μˆ˜μ—΄μ— λ„£λŠ”λ‹€. (μŠ€νƒμ΄ λΉ„μ—ˆλ‹€.)

     

    μ†ŒμŠ€ μ½”λ“œ

    #include <bits/stdc++.h>
    using namespace std;
    
    int main(void) {
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	
    	int n;
    	cin >> n;
    	
    	stack<int> S;
    	vector<char> result;
    	int idx = 1;
    	
    	while (n--) {
    		int num;
    		cin >> num;
    		
    		while (idx <= num) {
    			S.push(idx);
    			idx++;
    			result.push_back('+');
    		}
    		
    		if (S.top() == num) {
    			S.pop();
    			result.push_back('-');
    		} else {
    			cout << "NO";
    			return 0;
    		}
    	}
    	
    	for (int i = 0; i < result.size(); i++) {
    		cout << result[i] << '\n';
    	}
    	
    	return 0;
    }

     

    λ°˜μ‘ν˜•
Designed by Tistory.