
알고리즘 분류 : 투 포인터
난이도 : 골드4
출처 : 백준 - 문자열 생성


투포인터 방식으로 문제를 해결한다.
입력받은 알파벳을 arr에 넣는다.
p1 = 0, p2 = N-1로 설정한다.
arr[p1]과 arr[p2]를 비교해서arr[p1]이 더 작을 경우 p1++,
arr[p2]이 더 작을 경우 p2--를 한다.이때 arr[p1]과 arr[p2]가 같을 경우 p1++, p2--를 해서 반복적으로 비교한다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
int arr[] = new int[N];
int cnt=0;
for(int i=0;i<N;i++) {
arr[i] = br.readLine().charAt(0)-'A';
}
int p1=0,p2=N-1;
while(p1<=p2) {
if(arr[p1]<arr[p2]) {
sb.append((char)('A'+arr[p1]));
p1++;
}
else if(arr[p1]>arr[p2]) {
sb.append((char)('A'+arr[p2]));
p2--;
}
else {
boolean flag = false;//true면 p1++, false면 p2--
flag = CheckAlpha(p1, p2, arr);
if (flag) {
sb.append((char)('A' + arr[p1]));
p1++;
} else {
sb.append((char)('A' + arr[p2]));
p2--;
}
}
cnt++;
if(cnt%80==0)
sb.append("\n");
}
System.out.println(sb);
}
static boolean CheckAlpha(int p1, int p2, int[] arr) {
while(true) {
p1++;
p2--;
if(p1>=p2)
break;
if(arr[p1]<arr[p2])
return true;
else if(arr[p1]>arr[p2])
return false;
}
return true;
}
}

막히지 않고 문제를 해결했지만 계속 에러가 났다.
보니깐 출력 조건에 80줄 단위로 개행을 하라고 되어있었다.
출력조건을 잘 읽자..!