회문 작성 알고리즘이란?
한 문장을 앞에서부터 읽은 것이나, 뒤에서부터 읽은 것이나 같은 문장
예시 : abcdedcba
문제
: 문자열로 들어오는 str 뒤에 0 이상의 값을 추가하여 회문을 생성하고자 한다.
생성할 수 있는 가장 짧은 회문의 길이를 구하시오.
아이디어 짜기
1. 구하는 값은 str의 총 길이가 될 것이며, str 뒤에 0 이상의 값을 추가하여 회문을 만드는 것이기 때문에
리턴되는 회문의 최단 길이는 str의 길이가 될 것입니다.
따라서 구하려는 값의 초기 값은 str의 길이로 잡고 시작하면 됩니다.
2. 비교할 것은 문자열의 처음 위치 값과 그 다음 위치 값을 비교합니다.
3. 다른 값이 나올 경우 반복문을 끝내고 회문이 아니기 떄문에 str 문자열 뒤에 값을 추가합니다.
코드는 다음과 같습니다.
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print(find("abcdefabcdef"));
}
public static int find(String str) {
for (int i = str.length();; i++) {
boolean flag = true;
for (int j = 0; j < str.length(); j++) {
if ((i - j - 1) < str.length() && str.charAt(j) != str.charAt(i - j - 1)) {
flag = false;
break;
}
}
if (flag) {
return i;
}
}
}
}
이상 회문 만들기 알고리즘 풀이였습니다.
감사합니다.
'Algorithm' 카테고리의 다른 글
BOJ_1476_날짜계산 문의 (0) | 2018.06.01 |
---|---|
비트마스크 정리 (0) | 2018.05.31 |
전체 탐색 알고리즘 소개 (0) | 2018.04.30 |
시뮬레이션 문제 (0) | 2018.04.30 |
Collection (0) | 2018.01.08 |