mooonπŸŒ™
STUDY
mooonπŸŒ™
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (170)
    • μ½”λ”© ν…ŒμŠ€νŠΈ (147)
      • λ°±μ€€ μ•Œκ³ λ¦¬μ¦˜ (53)
      • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] Lv1 (13)
      • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] μ½”λ”© ν…ŒμŠ€νŠΈ μž…λ¬Έ (54)
      • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] SQL 고득점 Kit (27)
    • BACK (4)
      • Spring (3)
      • PHP (0)
    • FRONT (5)
    • DevOps (8)
      • Jenkins (8)
    • GitHub🌱 (2)
    • λ°μ΄ν„°λ² μ΄μŠ€ (1)
      • SQL (1)
    • Error πŸ’₯ (0)
      • php (2)
    • πŸ˜‹ (1)

λΈ”λ‘œκ·Έ 메뉴

  • ⭐ κΉƒν—ˆλΈŒ
  • πŸ’• λ°©λͺ…둝
  • πŸ’₯ νƒœκ·Έ

인기 κΈ€

νƒœκ·Έ

  • λ°±μ€€
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • DevOps
  • SQL
  • μ•Œκ³ λ¦¬μ¦˜
  • Python
  • c++
  • SQL 고득점 Kit
  • λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°
  • μ½”λ”©ν…ŒμŠ€νŠΈ μž…λ¬Έ

졜근 κΈ€

250x250
hELLO Β· Designed By μ •μƒμš°.
mooonπŸŒ™

STUDY

μ½”λ”© ν…ŒμŠ€νŠΈ/λ°±μ€€ μ•Œκ³ λ¦¬μ¦˜

λ°±μ€€ 1874 _ μŠ€νƒ μˆ˜μ—΄

2020. 2. 27. 14:21
728x90

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

 

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


⭐ λ‚΄ μ†ŒμŠ€ μ½”λ“œ

#include<iostream>
#include <stack>
#include <vector>
using namespace std;


int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	int num,n;
	vector<int> answer;
	stack<int> s;
	vector<char> a;
	cin >> num;
	for (int i = 0; i < num; i++) {
		cin >> n;
		answer.push_back(n);
	}
	n = 1;
	for (int i = 0; i < answer.size(); i++) {
		if (s.empty()) {
        	//μŠ€νƒμ΄ λΉ„μ–΄μžˆλŠ”λ°, μŠ€νƒμ— μΆ”κ°€ 될 값이 λ§Œλ“€μ–΄μ•Όλ˜λŠ” μˆ«μžλ³΄λ‹€ 클 경우
			if (n > answer[i]) {
            	//μˆ˜μ—΄μ„ μ™„μ„± ν•  수 μ—†λŠ” 경우라 νŒλ‹¨, μ’…λ£Œ
				s.push(-1);
				break;
			}
			s.push(n++);
			a.push_back('+');
		}
        //λ§Œλ“€μ–΄μ•Ό λ˜λŠ” μˆ«μžλ³΄λ‹€ μŠ€νƒμ— μΆ”κ°€ 될 값이 μž‘μ„ 경우
		while (n <= answer[i] ){
        	//μŠ€νƒμ— 값을 κ³„μ†ν•˜μ—¬ μΆ”κ°€
			s.push(n++);
            //push 연산이 λ˜μ—ˆμœΌλ‹ˆ +λ₯Ό μ €μž₯
			a.push_back('+');
		}
        //μŠ€νƒμ— μΆ”κ°€ 될 μˆ˜κ°€ λ§Œλ“€μ–΄μ•Ό λ˜λŠ” 값보닀 클 경우
		while (n > answer[i]) {
			if (s.top() <= answer[i]) {
				break;
			}
            //μŠ€νƒμ—μ„œ pop될 값이 λ§Œλ“€μ–΄μ•Ό λ˜λŠ” μˆ˜λ³΄λ‹€ 클 경우
			else if(s.top()>answer[i]){
            	//κ³„μ†ν•΄μ„œ pop을 ν•΄μ€€λ‹€
				s.pop();
                //pop연산을 ν•˜μ˜€μœΌλ‹ˆ -λ₯Ό μ €μž₯
				a.push_back('-');
			}
		}
        //pop될 κ°’κ³Ό λ§Œλ“€μ–΄μ•Ό λ˜λŠ” μˆ˜κ°€ κ°™μœΌλ©΄
		if (s.top() == answer[i]) {
        	//ν•΄λ‹Ή 수λ₯Ό popν•˜κ³  -κ²°κ³Ό μ €μž₯
			a.push_back('-');
			s.pop();
		}
	}
    //μŠ€νƒμ΄ λΉ„μ–΄μžˆμœΌλ©΄ μˆ˜μ—΄μ„ μ™„μ„±ν•œ κ²ƒμœΌλ‘œ νŒλ‹¨
	if (s.empty()) {
    	//μ €μž₯ ν•΄λ‘μ—ˆλ˜ + - 값듀을 좜λ ₯
		for (int i = 0; i < a.size(); i++) {
			cout << a[i] << '\n';
		}
	}
    //λΉ„μ–΄μžˆμ§€ μ•ŠμœΌλ©΄ μˆ˜μ—΄μ„ μ™„μ„± ν•  수 μ—†λŠ” κ²ƒμœΌλ‘œ νŒλ‹¨
	else {
		cout << "NO";
	}

	return 0;
}

 

πŸ™ 문제 풀이

1λΆ€ν„° NκΉŒμ§€μ˜ 수λ₯Ό μŠ€νƒμ— λ„£μ—ˆλ‹€κ°€ 뽑아내어 λŠ˜μ–΄ λ†“μŒμœΌλ‘œμ¨ λ§Œλ“€μ–΄μ•Ό λ˜λŠ” μˆ˜μ—΄μ€ μž…λ ₯으둜 λ“€μ–΄μ˜€λŠ” μˆ˜μ—΄ (예제 μž…λ ₯ 1의 경우 : 4, 3, 6, 8, 7, 5, 2, 1)이닀.

 

예제 μž…λ ₯ 1의 경우λ₯Ό μ‚΄νŽ΄λ³΄μž. ν•΄λ‹Ή μˆ˜μ—΄μ—μ„œ κ°€μž₯ 처음으둜 ν•„μš”ν•œ μˆ˜λŠ” '4'이닀.

μŠ€νƒμ— 1, 2, 3, 4λ₯Ό push ν•˜λ‹ˆ, '+ + + +' λΌλŠ” 좜λ ₯을 μ–»κ²Œ λœλ‹€.

μŠ€νƒμ— ν•„μš”ν•œ 수인 4κ°€ push λ˜μ—ˆμœΌλ‹ˆ, 이것을 κΊΌλ‚΄μ–΄ μˆ˜μ—΄λ‘œ λ§Œλ“€μ–΄μ•Ό λœλ‹€. 4λΌλŠ” 수λ₯Ό popν•˜μ—¬ - λΌλŠ” 좜λ ₯을 μ–»κ²Œ λœλ‹€.

κ·Έ λ‹€μŒμœΌλ‘œ ν•„μš”ν•œ μˆ˜λŠ” '3'이닀. ν˜„μž¬ μŠ€νƒμ—λŠ” (1, 2, 3)μ΄λΌλŠ” μˆ˜κ°€ λ“€μ–΄μžˆλ‹€. λ°”λ‘œ pop을 ν•˜λ©΄ 3을 μ–»μ–΄ λ‚Ό 수 μžˆμœΌλ‹ˆ 3을 popν•˜κ³  -λΌλŠ” 좜λ ₯을 μ–»μ–΄λ‚Έλ‹€.

λ‹€μŒμœΌλ‘œ ν•„μš”ν•œ μˆ˜λŠ” '6'이닀. ν˜„μž¬ μŠ€νƒμ—λŠ” (1, 2)μ΄λΌλŠ” μˆ˜κ°€ λ“€μ–΄μžˆλ‹€. μŠ€νƒμ—λŠ” 6μ΄λΌλŠ” 값이 μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ pushλ₯Ό κ³„μ†ν•΄μ„œ ν•΄μ€€λ‹€. μŠ€νƒμ— (1, 2, 5, 6)이 pushκ°€ 되고 + +λΌλŠ” 좜λ ₯을 μ–»μ–΄λ‚Έλ‹€. ν•„μš”ν•œ 수인 '6'이 μŠ€νƒμ— λ“€μ–΄μ™”μœΌλ―€λ‘œ 이것을 popν•˜μ—¬ 6μ΄λΌλŠ” 숫자λ₯Ό μ–»μ–΄λ‚΄κ³  -의 좜λ ₯을 μ–»λŠ”λ‹€.

μœ„μ™€ 같은 과정을 κ³„μ†ν•˜μ—¬ 반볡.

728x90
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)
    'μ½”λ”© ν…ŒμŠ€νŠΈ/λ°±μ€€ μ•Œκ³ λ¦¬μ¦˜' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • λ°±μ€€ 10828 _ μŠ€νƒ
    • λ°±μ€€ 4949 _ κ· ν˜•μž‘νžŒ 세상
    • λ°±μ€€ 2920 _ μŒκ³„
    • λ°±μ€€ 1152 _ λ‹¨μ–΄μ˜ 개수
    mooonπŸŒ™
    mooonπŸŒ™
    개발 곡뢀 기둝

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”