의식의 흐름
투 포인터로 양 끝 비교하고 만약에 같으면 각각의 옆을 비교하면 되는거 아닐까,,,
=> 실패 : 한 번만 옆을 비교하는 경우 양 끝이 여러번 같은 경우 이상하게 나옴 (ex. CCACFBCC)
=> 그럼 다른 글자가 나올 때까지 양 끝을 비교하면 되겠네?
=> 실패 실패 실패 실패 ...
=> ?????????? (결국 포기)
=> 하루 지나서 문득 생각난 오류
= 전체 문자열에 대해서 돌리고 80번째에서 새 줄로 변경한 것이 아니라 80개씩 잘라서 양끝 비교하고 출력함...
=> 수정
=> 통과
아,, 즐겁당^^
풀이 과정
1. 문자열 S의 길이(N)을 입력 받는다.
2. 입력받은 문자를 char[] S에 저장한다.
3. 투 포인터를 이용하여 배열 S의 양 끝 문자를 비교한다.
- 만약 S[start] < S[end]인 경우, S[start]를 StringBuilder T 맨 마지막에 더해준다.
- 만약 S[start] > S[end]인 경우, S[end]를 T 맨 마지막에 더해준다.
- 만약 S[start] == S[end]인 경우,
- 양 끝에서 각각의 옆 쪽 문자가 다를 때까지 비교한다.
- 다른 문자를 찾은 경우, 더 작은 문자를 T 맨 마지막에 더해준다.
4. 완성된 T를 80 배수의 문자에서 '\n'을 추가하여 출력한다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static final int MAX_LENGTH = 80;
public static int N;
public static char[] S;
public static StringBuilder T;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
S = new char[N];
for(int i=0;i<N;i++){
S[i] = br.readLine().charAt(0);
}
findString();
for(int i=0;i<N;i++){
bw.write(T.charAt(i));
if((i+1)%80 == 0){
bw.write("\n");
}
}
bw.flush();
br.close();
bw.close();
}
public static void findString(){
T = new StringBuilder();
int start = 0;
int end = N-1;
while(start<=end) {
char startChar = S[start];
char endChar = S[end];
if (startChar < endChar) {
T.append(startChar);
start++;
continue;
} else if (startChar > endChar) {
T.append(endChar);
end--;
continue;
}
int tmpStart = start + 1;
int tmpEnd = end - 1;
boolean plusChar = false;
while (tmpStart <= tmpEnd) {
char tmpStartChar = S[tmpStart];
char tmpEndChar = S[tmpEnd];
if (tmpStartChar < tmpEndChar) {
T.append(startChar);
start++;
plusChar = true;
break;
} else if (tmpStartChar > tmpEndChar) {
T.append(endChar);
end--;
plusChar = true;
break;
}
tmpStart++;
tmpEnd--;
}
if (!plusChar) {
T.append(startChar);
start++;
}
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA] 백준 q15787 - 기차가 어둠을 헤치고 은하수를 (0) | 2023.12.13 |
---|---|
[JAVA] 백준 q17626 - Four Squares (2) | 2023.11.28 |
[JAVA] 백준 q21608 - 상어 초등학교 (2) | 2023.11.22 |
[JAVA] 백준 q16926 - 배열 돌리기 1 (0) | 2023.11.21 |
[JAVA] 백준 q22945 - 팀 빌딩 (2) | 2023.11.20 |