ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ถ ๋ฌธ์ ๋ ๊ณ ์ ์ ์ธ ๋ฌธ์ ์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ์์
์ ์ํ๊ณผ ๊ด๋ จ์ด ์์ผ๋ฉฐ ์ปดํจํฐ ๊ณผํ ์ ๊ณต ํ์๋ค๊ณผ ๋ฉด์ ์์ ๊ตฌ์ง์์๊ฒ ๋ฌป๋ ๊ฒ์ ๋งค์ฐ ์ข์ํฉ๋๋ค. ๊ทธ๊ฒ๋ค์ ๋น์ ์ ์๊ฐ์ ํ๋ก๊ทธ๋๋จธ ๋ฐฉ์์ผ๋ก ์ค์ ํ๊ณ ๊ทธ๊ฒ์ ํ๋ จ์ํค๋ ๋ฐ ๋์์ด ๋๊ธฐ ๋๋ฌธ์ ์ข์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ์ค ํ๋๋ ๋ฌธ์์ด์ด ํ๋ฌธ์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ฉฐ ์ด ๊ธฐ์ฌ์์ ์ด๋ฅผ ๊ณ ๋ คํ ๊ฒ์
๋๋ค.
ํ๋ฌธ์ด๋ ๋ฌด์์ด๋ฉฐ ํ๋ฌธ์ ์ฐพ์ ์ ์๋ ์ด์
ํ๋ฌธ์ ์ซ์, ๋ฌธ์ ์กฐํฉ, ๋จ์ด ๋๋ ํ ์คํธ๊ฐ ์๋ฐฉํฅ์ผ๋ก ๋์ผํ๊ฒ ์ฝํ๋ ๊ฒ์ ๋๋ค. ์์ฝํ๋ฉด, ํ๋ฌธ์ ์ค์ฌ์ด ๋์นญ์ธ ๋ชจ๋ ๋ฌธ์ ์งํฉ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ด ๋จ์ด๋ ๋ฌธ์ ๊ทธ๋๋ก "๋ค๋ก ๋ฌ๋ ค๊ฐ๋ค"(palin์ "๋ค์, ๋ค๋ก", dromos๋ "๋ฌ๋ฆฌ๋ค")์์ ํ์๋ ๊ทธ๋ฆฌ์ค์ด ์ด๊ทผ์์ ์ ๋ํ์ต๋๋ค. ์๋ฐ์์ Palindrome์ ์ผ๋ฐ์ ์ธ ์๋ฏธ์ ๋์ผํฉ๋๋ค. ํ๋ฌธ์ ์:- 1881๋
- ์์ฟ ์ฟ ์นด
- ํ
- ์ ์ค
- ์์ค
- ๋กํ ์ดํฐ
- ๋ด ์ฒด์ก๊ด
- ๋ถ์ธ ์ ๋ ์๋ด์ ๋๋ค
- ์ด์ ์ ์์์ ์น๋ฆฌํ์ต๋๋ค!
Palindrome ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ ์์
์๊ฐ ํด๋ด. ๋ฌธ์์ด์ ์ผ๋ จ์ ๋ฌธ์, ์ฆ ๋ฌธ์ ๋ฐฐ์ด์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ด ์์๋ฅผ ์์ชฝ์์ ์ค๊ฐ์ผ๋ก ๋ฐ๋ผ๊ฐ๋ฉด์ ๊ทน๋จ์ ์ธ ์บ๋ฆญํฐ๋ฅผ ๋น๊ตํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋ ผ๋ฆฌ์ ์ผ ๊ฒ์ ๋๋ค. ์ค์์ ๋๋ฌํ ๋๊น์ง ๋ชจ๋ ๋ฌธ์๊ฐ ์ผ์นํ๋ฉด ํ๋ฌธ์ด ์๋ ๊ฒ์ ๋๋ค. String์ด palindrome์ธ์ง ํ์ธํ๊ธฐ ์ํด boolean ๋ฉ์๋ validPalindrome(String s)๋ฅผ ๋ง๋ค์ด ๋ด ์๋ค. ์๋ฐ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public class PalindromeTest1 {
//method to check if a string is palindrome
public static boolean validPalindrome(String s) {
for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
if (s.charAt(i) != s.charAt(j)) {
return false;
}
}
return true;
}
public static void main(String[] args) {
String s1 = "level";
String s2 = "cool";
String s3 = "Madam";
String s4 = "Now, sir, a war is won!"
boolean b1 = validPalindrome(s1);
boolean b2 = validPalindrome(s2);
boolean b3 = validPalindrome(s3);
boolean b4 = validPalindrome(s4);
System.out.println("is " + s1 + " a palindrome? " + b1);
System.out.println("is " + s2 + " a palindrome? " + b2);
System.out.println("is " + s3 + " a palindrome? " + b3);
System.out.println("is " + s4 + " a palindrome? " + b4);
}
}
๊ธฐ๋ณธ ๋ฉ์๋์์ ํ๋ฌธ ๋ฌธ์์ด "level", "cool", "Madam" ๋ฐ "Now, sir, a war is won!"์ ํ์ธํฉ๋๋ค. ๋ณด์๋ค์ํผ ์ฒซ ๋ฒ์งธ, ์ธ ๋ฒ์งธ, ๋ค ๋ฒ์งธ๋ ํ๋ฌธ์ด์ง๋ง ๋ ๋ฒ์งธ๋ ํ๋ฌธ์ด ์๋๋๋ค. ํ๋ก๊ทธ๋จ์ ๋ฌด์์ ์ ๊ณตํฉ๋๊น?
์์ค์ ํ๋ฌธ์
๋๊น? ํฐ๋ฆฐ๋๋กฌ์ด ๋ฉ์ง๊ฐ์? false ๋ถ์ธ์ ํ๋ฌธ์
๋๊น? ๊ฑฐ์ง์ ์ด์ ์ ์์์ ์น๋ฆฌํ์ต๋๋ค! ํ๋ฌธ? ๊ฑฐ์ง
๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ๋ ํ๋ฌธ์ด๊ณ ๋ ๋ฒ์งธ๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ธ ๋ฒ์งธ์ ๋ค ๋ฒ์งธ๋ ๋ฌด์์ด ์๋ชป๋์์ต๋๊น? ์ ๊ฒฐ๊ณผ๊ฐ ๊ฑฐ์ง ์
๋๊น ? ์ด ๋ฌธ์์ด์ ์ผ๋ถ ๋ฌธ์๋ ๋๋ฌธ์์ด๊ณ ์ผ๋ถ๋ ์๋ฌธ์์ด๋ฉฐ Java M๊ณผ m์ ์๋ก ๋ค๋ฅธ ๋ ๋ฌธ์๋ผ๋ ์ ์ ์ด๋ฏธ ์ง์ํ์
จ์ ๊ฒ์
๋๋ค. ์ด ์ฐจ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ฐ์ ํด ๋ด
์๋ค. ๋ค์์ ๋ฌธ์์ด์ด ๋๋ฌธ์์ ์๋ฌธ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํ๋ฌธ์ธ์ง ํ์ธํ๋ ํ๋ก๊ทธ๋จ์
๋๋ค.
public class PalindromeTest2 {
//lowercase and uppercase characters should be treated the same:
public static boolean validPalindrome(String s) {
for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j)))
return false;
}
return true;
}
public static void main(String[] args) {
String s1 = "level";
String s2 = "cool";
String s3 = "Madam";
String s4 = "Now, sir, a war is won!"
boolean b1 = validPalindrome(s1);
boolean b2 = validPalindrome(s2);
boolean b3 = validPalindrome(s3);
boolean b4 = validPalindrome(s4);
System.out.println("is " + s1 + " a palindrome? " + b1);
System.out.println("is " + s2 + " a palindrome? " + b2);
System.out.println("is " + s3 + " a palindrome? " + b3);
System.out.println("is " + s4 + " a palindrome? " + b4);
}
}
์ด๋ฒ์๋ ๊ฒฐ๊ณผ๊ฐ ๋ ์์ธก ๊ฐ๋ฅํฉ๋๋ค.
์์ค์ ํ๋ฌธ์
๋๊น? ํฐ๋ฆฐ๋๋กฌ์ด ๋ฉ์ง๊ฐ์? false ๋ถ์ธ์ ํ๋ฌธ์
๋๊น? ์ฌ์ค์
๋๋ค. ์ด์ ์ ์์์ ์น๋ฆฌํ์ต๋๋ค! ํ๋ฌธ? ๊ฑฐ์ง
์โฆ ์ ํํ๊ฒ ์์ธกํ ์๋ ์์ต๋๋ค. "Madam"์ ์ํฉ์ ๋์์ง๊ณ ์์ง๋ง ๊ธธ๊ณ ํ๋ณตํ ํ๋ฌธ "์ด์ ์ ์์ด ์น๋ฆฌํ์ต๋๋ค!"๋ ์ด๋ป์ต๋๊น? ๋ชจ๋ ๊ณต๋ฐฑ๊ณผ ๊ตฌ๋์ ๊ธฐํธ๊ฐ Java์ ๋ฌธ์์ ๋์ผํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํ๋ค๋ฉด ๋งค์ฐ ์ฝ์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ์ค์๋ฅผ ๋ฐ๋ก์ก๊ธฐ ์ํด ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ ๊ฐ์ ํด์ผ ํฉ๋๋ค. ๊ณต๋ฐฑ๊ณผ ๊ตฌ๋์ ์ ๋ฌด์ํ๋๋ก ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฅด์น์. ๊ฐ๋จํ ๋งํด์ ์์ซ์๊ฐ ์๋ ๋ชจ๋ ๋ฌธ์๋ฅผ ๋ฌด์ํฉ๋๋ค. ๋ค์์ Java์์ ๊ฐ์ ๋ ํ๋ฌธ ํ๋ก๊ทธ๋จ์
๋๋ค.
public class PalindromeTest3 {
//in addition to the above, ignore all non alphanumeric chars like punctuation and spaces
private static boolean isAlphanumeric(char c) {
return Character.isAlphabetic(c) || Character.isDigit(c);
}
public static boolean validPalindromeIgnorePunctuation(String s) {
for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
// skip chars we should ignore
while (j >= 0 && !isAlphanumeric(s.charAt(j))) j--;
while (i < s.length() && !isAlphanumeric(s.charAt(i))) i++;
// overskipped -> nothing left to validate
if (i >= j) return true;
if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j)))
return false;
}
return true;
}
public static void main(String[] args) {
String s1 = "level";
String s2 = "cool";
String s3 = "Madam";
String s4 = "Now, sir, a war is won!";
boolean b1 = validPalindromeIgnorePunctuation(s1);
boolean b2 = validPalindromeIgnorePunctuation(s2);
boolean b3 = validPalindromeIgnorePunctuation(s3);
boolean b4 = validPalindromeIgnorePunctuation(s4);
System.out.println("is " + s1 + " a palindrome? " + b1);
System.out.println("is " + s2 + " a palindrome? " + b2);
System.out.println("is " + s3 + " a palindrome? " + b3);
System.out.println("is " + s4 + " a palindrome? " + b4);
}
}
์ต์ํ ๊ฒฐ๊ณผ๋ ์ฐ๋ฆฌ๊ฐ ์์ํ ๊ฒ์
๋๋ค.
์์ค์ ํ๋ฌธ์
๋๊น? ํฐ๋ฆฐ๋๋กฌ์ด ๋ฉ์ง๊ฐ์? false ๋ถ์ธ์ ํ๋ฌธ์
๋๊น? ์ฌ์ค์
๋๋ค. ์ด์ ์ ์์์ ์น๋ฆฌํ์ต๋๋ค! ํ๋ฌธ? ์ง์ค
ํ๋ก๊ทธ๋๋ฐ์ ๋ง ์์ํ๋ค๋ฉด ๋ฌธ์์ด ์ํ ๋ฐ ๋น๊ต ์๊ณ ๋ฆฌ์ฆ์ ์๋ ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ฌผ๋ก ์ด๊ฒ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ ์ข์ง๋ง ์ค์ ๋ก๋ ๋ฌธ์์ด ์ธ ๋ฌธ์ ๋ฐฐ์ด์ ํตํด ๋ฐ๋ก ๊ทธ ๊ตฌ์ ์ ๋จ์ํ ๋ ๋ฒ์ ์ ์์ฑํ ์ ์์ต๋๋ค. StringBuffer.reverse ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ด ํ๋ฌธ์ธ์ง ํ์ธํ ์ ์์ต๋๋ค. ์์ซ์๊ฐ ์๋ ๊ธฐํธ์ ๋๋ฌธ์ ๋ฐ ์๋ฌธ์๋ฅผ ํ์ธํ์ง ์๊ณ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฒ์ ์ ์ํํด ๋ด
์๋ค.
public class PalindromeTest5 {
public static boolean validPalindrome(String s) {
StringBuffer buffer = new StringBuffer(s);
buffer.reverse();
String data = buffer.toString();
if (s.equals(data)) {
return true;
}
return false;
}
public static void main(String[] args) {
String s1 = "level";
String s2 = "cool";
String s3 = "Madam";
String s4 = "Now, sir, a war is won!";
boolean b1 = validPalindrome(s1);
boolean b2 = validPalindrome(s2);
boolean b3 = validPalindrome(s3);
boolean b4 = validPalindrome(s4);
System.out.println("is " + s1 + " a palindrome? " + b1);
System.out.println("is " + s2 + " a palindrome? " + b2);
System.out.println("is " + s3 + " a palindrome? " + b3);
System.out.println("is " + s4 + " a palindrome? " + b4);
}
}
๊ฒฐ๊ณผ๋ ์ฒซ ๋ฒ์งธ ์์ ๋์ผํฉ๋๋ค.
์์ค์ ํ๋ฌธ์
๋๊น? ํฐ๋ฆฐ๋๋กฌ์ด ๋ฉ์ง๊ฐ์? false ๋ถ์ธ์ ํ๋ฌธ์
๋๊น? ๊ฑฐ์ง์ ์ด์ ์ ์์์ ์น๋ฆฌํ์ต๋๋ค! ํ๋ฌธ? ๊ฑฐ์ง
์ํ๋ค๋ฉด ์ฒซ ๋ฒ์งธ ์์์ ํ๋ ๊ฒ์ฒ๋ผ ์ด ํ๋ก๊ทธ๋จ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ๋ฐฐ์ด ๋ด์ฉ์ ๋ณด๊ฐํ๋ ค๋ฉด Java ๊ณผ์ ์์ ๋น๋์ค ๊ฐ์๋ฅผ ์์ฒญํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
GO TO FULL VERSION