๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€

#1918

by flowing1ife 2023. 3. 3.
  • ๋ฌธ์ œ

์ˆ˜์‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ 3๊ฐ€์ง€ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฐ์‚ฐ์ž๊ฐ€ ํ”ผ์—ฐ์‚ฐ์ž ๊ฐ€์šด๋ฐ ์œ„์น˜ํ•˜๋Š” ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•(์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค), ์—ฐ์‚ฐ์ž๊ฐ€ ํ”ผ์—ฐ์‚ฐ์ž ์•ž์— ์œ„์น˜ํ•˜๋Š” ์ „์œ„ ํ‘œ๊ธฐ๋ฒ•(prefix notation), ์—ฐ์‚ฐ์ž๊ฐ€ ํ”ผ์—ฐ์‚ฐ์ž ๋’ค์— ์œ„์น˜ํ•˜๋Š” ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•(postfix notation)์ด ๊ทธ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ‘œํ˜„๋œ a+b๋Š” ์ „์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ๋Š” +ab์ด๊ณ , ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ๋Š” ab+๊ฐ€ ๋œ๋‹ค.

์ด ๋ฌธ์ œ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฃฐ ํ‘œ๊ธฐ๋ฒ•์€ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์ด๋‹ค. ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์€ ์œ„์—์„œ ๋งํ•œ ๋ฒ•๊ณผ ๊ฐ™์ด ์—ฐ์‚ฐ์ž๊ฐ€ ํ”ผ์—ฐ์‚ฐ์ž ๋’ค์— ์œ„์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด ๋ฐฉ๋ฒ•์˜ ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์“ฐ๋Š” ์ค‘์œ„ ํ‘œ๊ธฐ์‹ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋ง์…ˆ๊ณผ ๊ณฑ์…ˆ์˜ ์šฐ์„ ์ˆœ์œ„์— ์ฐจ์ด๊ฐ€ ์žˆ์–ด ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์ง€๋งŒ ํ›„์œ„ ํ‘œ๊ธฐ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ˆœ์„œ๋ฅผ ์ ์ ˆํžˆ ์กฐ์ ˆํ•˜์—ฌ ์ˆœ์„œ๋ฅผ ์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ด„ํ˜ธ ๋“ฑ๋„ ํ•„์š” ์—†๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด a+b*c๋ฅผ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ฐ”๊พธ๋ฉด abc*+๊ฐ€ ๋œ๋‹ค.

์ค‘์œ„ ํ‘œ๊ธฐ์‹์„ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋ฉด ์ด๋ ‡๋‹ค. ์šฐ์„  ์ฃผ์–ด์ง„ ์ค‘์œ„ ํ‘œ๊ธฐ์‹์„ ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์ค€๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ์— ๊ด„ํ˜ธ ์•ˆ์˜ ์—ฐ์‚ฐ์ž๋ฅผ ๊ด„ํ˜ธ์˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด a+b*c๋Š” (a+(b*c))์˜ ์‹๊ณผ ๊ฐ™๊ฒŒ ๋œ๋‹ค. ๊ทธ ๋‹ค์Œ์— ์•ˆ์— ์žˆ๋Š” ๊ด„ํ˜ธ์˜ ์—ฐ์‚ฐ์ž *๋ฅผ ๊ด„ํ˜ธ ๋ฐ–์œผ๋กœ ๊บผ๋‚ด๊ฒŒ ๋˜๋ฉด (a+bc*)๊ฐ€ ๋œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋˜ +๋ฅผ ๊ด„ํ˜ธ์˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ณ ์น˜๋ฉด abc*+๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค.

๋‹ค๋ฅธ ์˜ˆ๋ฅผ ๋“ค์–ด ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด A+B*C-D/E๋ฅผ ์™„์ „ํ•˜๊ฒŒ ๊ด„ํ˜ธ๋กœ ๋ฌถ๊ณ  ์—ฐ์‚ฐ์ž๋ฅผ ์ด๋™์‹œํ‚ฌ ์žฅ์†Œ๋ฅผ ํ‘œ์‹œํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋œ๋‹ค.

๊ฒฐ๊ณผ:  ABC*+DE/-

์ด๋Ÿฌํ•œ ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์ค‘์œ„ ํ‘œ๊ธฐ์‹์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๊ณ ์น˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค

  • ์ฝ”๋“œ
#include <iostream>
#include <stack>
#include <map>

using namespace std;

int main()
{
	char str[500]; // ๋ฌธ์ž์—ด ๋ฐ›์„ ๋ฐฐ์—ด
	stack<char>s;

	//๊ฐ ๊ธฐํ˜ธ์— ๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„ ๋งคํ•‘
	map<char, int> m;
	m['('] = m[')'] = 0;
	m['*'] = m['/'] = 1;
	m['+'] = m['-'] = 2;


	//์ž…๋ ฅ
	cin.getline(str, 501);

	for (int i = 0; str[i] != '\0'; i++) { //๋ฌธ์žฅ์˜ ๋์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
		if (str[i] == '(' || str[i] == ')' || str[i] == '*' || str[i] == '/' || str[i] == '+' || str[i] == '-') {
			//๊ธฐํ˜ธ๋ผ๋ฉด

			if (s.empty()|| m[s.top()] > m[str[i]]) {
				//์Šคํƒ์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์• ๋“ค์ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ
				if (str[i] != ')') { //๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋งŒ ์‚ฝ์ž…
					s.push(str[i]);
				}
				else {
					//๋‹ซํžŒ ๊ด„ํ˜ธ๋ผ๋ฉด ( ๋งŒ๋‚ ๋•Œ ๊นŒ์ง€ ์ถœ๋ ฅ
					while (s.top() != '(') {
						cout << s.top();
						s.pop();
					}
					s.pop(); // ( ๋„ ์ œ๊ฑฐ
				}
			}
			else {
				//์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š๊ณ  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ๋‚ฎ์€ ์• ๋“ค์ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ
				
				if (str[i] == ')') { // ๋‹ซํžŒ ๊ด„ํ˜ธ์ผ ๊ฒฝ์šฐ ๋ฌด์กฐ๊ฑด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™์€ ( ์ผ ์ˆ˜ ๋ฐ–์— ์—†์œผ๋ฏ€๋กœ 
					s.pop(); // ( ์ œ๊ฑฐ
				}
				else {
					//๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์Šคํƒ์˜ top ์›์†Œ๋ณด๋‹ค ๋†’์•„์ง€๊ฑฐ๋‚˜ ์Šคํƒ์ด ๋นŒ ๋•Œ๊นŒ์ง€ ์ถœ๋ ฅ
					while (!s.empty() && (m[s.top()] <= m[str[i]])) {
						if (s.top() == '(') { // ( ๊ทธ๋ƒฅ ๋ฌด์‹œ 
							break;
						}
						cout << s.top();
						s.pop();
					}
					s.push(str[i]); // ์ƒˆ๋กœ ๋“ค์–ด์˜จ ๊ธฐํ˜ธ ์Šคํƒ์— ์‚ฝ์ž…
				}
			}
		}
		else { //๋ฌธ์ž๋ผ๋ฉด ๊ทธ๋ƒฅ ์ถœ๋ ฅ
			cout<<str[i];
		}
	}

	while (!s.empty()) { // ์Šคํƒ์— ๋‚จ์•„์žˆ๋Š” ๊ธฐํ˜ธ ์ถœ๋ ฅ
		cout << s.top();
		s.pop();
	}
	return 0;
}
  • ํ•ด์„ค

1. main ํ•จ์ˆ˜

: ๋ฌธ์ž์—ด ๋ฐ›์„ ๋ฐฐ์—ด๊ณผ ์Šคํƒ์„ ์„ ์–ธ

: ๊ฐ ๊ธฐํ˜ธ์— ๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋งคํ•‘

: cin.getline(str,501)์„ ํ†ตํ•ด ํ•œ ์ค„์„ ์ž…๋ ฅ ๋ฐ›์Œ

: for๋ฌธ์„ ํ†ตํ•ด ๋ฌธ์žฅ์˜ ๋์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณต

: ๋งŒ์•ฝ ๊ธฐํ˜ธ์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด

  • ์Šคํƒ์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์• ๋“ค์ด ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ (์ฆ‰, ๋งคํ•‘๋œ ์ˆซ์ž๊ฐ€ ์ž‘์€ ์• ๋“ค์ด ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ)

: ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋งŒ ์Šคํƒ์— ์‚ฝ์ž…

: ๋งŒ์•ฝ ๋‹ซํžŒ ๊ด„ํ˜ธ๋ผ๋ฉด '('์„ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ์Šคํƒ์— ์žˆ๋Š” ๊ธฐํ˜ธ๋“ค ์ถœ๋ ฅ ํ›„ '(' ๋„ ์ œ๊ฑฐ

  • ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š๊ณ  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ๋‚ฎ์€ ์• ๋“ค์ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ (์ฆ‰, ๋งคํ•‘๋œ ์ˆซ์ž๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ํฐ ์• ๋“ค์ด ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ)

: ')' ์ผ ๊ฒฝ์šฐ ๋ฌด์กฐ๊ฑด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™์€ '('์ผ ์ˆ˜ ๋ฐ–์— ์—†์œผ๋ฏ€๋กœ '(' ์ œ๊ฑฐ

: ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์Šคํƒ์˜ top ์›์†Œ๋ณด๋‹ค ๋†’์•„์ง€๊ฑฐ๋‚˜ (์ฆ‰, ๋งคํ•‘๋œ ์ˆซ์ž๊ฐ€ ์ž‘์•„์ง€๊ฑฐ๋‚˜) ์Šคํƒ์ด ๋นŒ ๋•Œ๊นŒ์ง€ ์ถœ๋ ฅ. ์ด ๋•Œ, '('๋Š” ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ  while๋ฌธ์„ ๋ฒ—์–ด๋‚˜๋„๋ก ํ•จ. ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ ๋“ค์–ด์˜จ ๊ธฐํ˜ธ๋Š” ์Šคํƒ์— ์‚ฝ์ž…

 

: ๋ฌธ์ž๋ผ๋ฉด ๊ทธ๋ƒฅ ์ถœ๋ ฅ

 

: ๋งˆ์ง€๋ง‰์œผ๋กœ ์Šคํƒ์— ๋‚จ์•„์žˆ๋Š” ๊ธฐํ˜ธ ๋ชจ๋‘ ์ถœ๋ ฅ

 

 

'์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป > ๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

#10757  (0) 2023.03.05
#20126  (0) 2023.03.03
#4949  (0) 2023.03.03
#1158  (0) 2023.03.03
#14425  (0) 2023.02.24