
1. ๋ฌธ์
- Stack ์ ํ์ฉํ์ฌ ๋ฌธ์๋ฅผ ๊ฑฐ๊พธ๋ก ๋งํด๋ ๋๊ฐ์ ๋ฌธ์์ด์ด ๋์ค๋ Palindrome ๋ง์ผ๋ฉด true, ์๋๋ฉด false ๋ฅผ ๋ฆฌํดํ๋ solution ์ ์์ฑํ์ธ์
- ์์ฌ(Pseudo) ์ฝ๋ → ์์ฌ ์ฝ๋๊ฐ ์ ์๊ฐ์ด ์๋๋ฉด ์๋์ ์ ๊ธฐ๋ฅผ ๋๋ฌ ์์ฌ ์ฝ๋๋ฅผ ํ์ธํ์ธ์
2. ๋ฌธ์ ๋ถ์
2.1 ๋ชฉํ : ์ฃผ์ด์ง ๋ฌธ์์ด์ด ํ๋ฌธ์ธ์ง ํ์ธํ๋ ํจ์ solution์ ์์ฑํ๋ค.
2.2 ํ๋ฌธ(Palindrome):
• ๋ฌธ์์ด์ ๋ค์ง์ด๋ ๋์ผํ ๋ฌธ์์ด์ด ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค.
• ์: “level”, “์ฐ์์ฐ”, “racecar”, “์ญ์ผ์ญ” ๋ฑ.
2.3 ์คํ ์ฌ์ฉ ์ด์ :
• ๋ฌธ์์ด์ ๋ค์ง๋ ๊ณผ์ ์ ์คํ์ LIFO(Last In First Out) ํน์ฑ์ ํ์ฉํ์ฌ ๊ตฌํํ๋ค.
import java.util.Stack;
public class StackAssignment2 {
public static boolean solution(String s) {
Stack<character> stack = new Stack<>();
//1. ๋ฌธ์์ด์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์คํ์ ์ถ๊ฐ
for (char c : s.toCharArray()) {
stack.puch(c);
}
// 2. ์คํ์์ ๋ฌธ์๋ฅผ ํ๋์ฉ ๊บผ๋ด๋ฉฐ ์๋ ๋ฌธ์์ด๊ณผ ๋น๊ต
for (char c : s.toCharArray()) {
if (stack.pop() != c) {
// ์คํ์์ ๊บผ๋ธ ๋ฌธ์์ ์๋ ๋ฌธ์์ด์ด ๋ค๋ฅด๋ฉด
return false;
}
}
//3. ๋ชจ๋ ๋ฌธ์๊ฐ ์ผ์นํ๋ฉด ํ๋ฌธ
return true;
}
public static void main(String[] args) {
String tc1 = "level"; // true
String tc2 = "์ฐ์์ฐ"; // true
String tc3 = "์ญ์ผ์ญ"; // true
System.out.println(solution(tc1)); // true
System.out.println(solution(tc2)); // true
System.out.println(solution(tc3)); // true
}
}
3. ์ฝ๋ ํ์ด
3.1 ์คํ์ ๋ฌธ์์ด์ ๋ฌธ์๋ฅผ ์ถ๊ฐ
- ์ฃผ์ด์ง ๋ฌธ์์ด s์ ๊ฐ ๋ฌธ์๋ฅผ ์คํ์ ์ถ๊ฐํ๋ค.
3.2 ์คํ์์ ๋ฌธ์ ๊บผ๋ด๊ธฐ :
- ์คํ์์ ๋ฌธ์๋ฅผ ํ๋์ฉ ๊บผ๋ด ์๋ ๋ฌธ์์ด๊ณผ ๋น๊ตํ๋ค.
์คํ์ ํน์ฑ์, ๊ฐ์ฅ ๋ง์ง๋ง์ ์ถ๊ฐ๋ ๋ฌธ์๊ฐ ๋จผ์ ๋์ค๋ฏ๋ก ๋ฌธ์์ด์ ๋ค์ง๋ ํจ๊ณผ๊ฐ ์๋ค.
3.3 ๋ฌธ์ ๋น๊ต:
- ์คํ์์ ๊บผ๋ธ ๋ฌธ์์ ์๋ ๋ฌธ์์ด์ ํด๋น ์์น์ ๋ฌธ์๋ฅผ ๋น๊ตํ๋ค.
ํ๋๋ค๋ก ๋ค๋ฅด๋ฉด ํ๋ฌธ์ด ์๋๋ฏ๋ก false๋ฅผ ๋ฐํํ๋ค.
๋ชจ๋ ๋ฌธ์๊ฐ ๊ฐ๋ค๋ฉด true๋ฅผ ๋ฐํํ๋ค.
์ฃผ์ ๋ ผ๋ฆฌ:
- ์คํ์ ์ด์ฉํ ๋ฌธ์์ด ๋ค์ง๊ธฐ :
์คํ์ LIFOํน์ฑ์ ์ด์ฉํ์ฌ ๋ฌธ์์ด์ ๋ค์ง๋ ๊ณผ์ ์ด ์๋์ผ๋ก ๊ตฌํ๋๋ค.
- ๋ฌธ์ ๋น๊ต:
์๋ ๋ฌธ์์ด์ ๋ค์งํ ๋ฌธ์์ด์ ๋น๊ตํ์ฌ ํ๋ฌธ ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค.