[백준/6137] 문자열 생성 - JAVA

이지환·2025년 5월 20일

알고리즘(백준) 💻

목록 보기
69/80
post-thumbnail

📌 문제

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

🦧 문제 풀이 접근

투포인터 방식으로 문제를 해결한다.
입력받은 알파벳을 arr에 넣는다.
p1 = 0, p2 = N-1로 설정한다.
arr[p1]과 arr[p2]를 비교해서

arr[p1]이 더 작을 경우 p1++,
arr[p2]이 더 작을 경우 p2--를 한다.

이때 arr[p1]과 arr[p2]가 같을 경우 p1++, p2--를 해서 반복적으로 비교한다.

💻 code

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줄 단위로 개행을 하라고 되어있었다.
출력조건을 잘 읽자..!

profile
takeitEasy

0개의 댓글