티스토리 뷰

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

 

16120번: PPAP

첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.

www.acmicpc.net

class Alphabet {
	constructor(value) {
		this.value = value;
		this.prev = null;
	}
}

class PPAP {
	constructor(str) {
		this.str = str;
		this.run();
		this.top = null;
	}

	run() {
		for (let i = 0; i < this.str.length; i++) {
			const alpha = this.str[i];
			if (alpha == 'P' && this.checkPPA()) {
				this.popPA();
			} else {
				this.push(alpha);
			}
		}
	}

	push(alpha) {
		const poa = new Alphabet(alpha);
		poa.prev = this.top;
		this.top = poa;
	}

	popPA() {
		this.top = this.top.prev.prev;
	}

	checkPPA() {
		if (!this.top) return false;
		if (this.top.value == 'P') return false;
		if (!this.top.prev) return false;
		if (this.top.prev.value == 'A') return false;
		if (!this.top.prev.prev) return false;
		if (this.top.prev.prev.value == 'A') return false;
		return true;
	}

	getResult() {
		let result = '';
		while (this.top != null) {
			result = this.top.value + result;
			this.top = this.top.prev;
		}
		if (result == 'PPAP' || result == 'P') {
			return 'PPAP';
		} else {
			return 'NP';
		}
	}

	printResult() {
		console.log(this.getResult());
	}
}

const input = require('fs').readFileSync('./dev/stdin').toString().trim();

const ppap = new PPAP(input);

ppap.run();
ppap.printResult();
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함