백준 SWAPC

KIMYEONGJUN·1일 전
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 번째 줄에 원래 문구를 나타내는 문자열 S의 길이가 주어진다. (1 ≤ |S| ≤ 100)
두 번째 줄에 문자열 S가 주어진다.
S는 알파벳 대문자로만 이루어져 있으며 공백을 포함하지 않는다.

디자이너가 수정한 이후의 문구를 나타내는 문자열을 한 줄에 출력하여라.

내가 이 문제를 보고 생각해본 부분

BufferedReader를 사용해 입력을 빠르게 받았다.
입력값으로 문자열 길이 N과 문자열 S를 받는다.
문자열을 문자 배열로 변환해서 문자 위치를 쉽게 바꿀 수 있도록 한다.
P와 C가 등장하는 인덱스 위치를 각각 리스트에 저장한다.
두 리스트의 크기 중 작은 값만큼 반복하며 그 인덱스에 해당하는 문자끼리 서로 자리를 교환한다.
P, C 이외 문자는 그대로 유지되고, 짝을 이루지 못하는 P 또는 C도 위치 변경 없이 남는다.
마지막으로 바뀐 문자열을 출력한다.
모든 처리가 끝나고 br.close()로 리소스도 안전하게 닫는다.

코드로 구현

package baekjoon.baekjoon_32;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

// 백준 32158번 문제
public class Main1294 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine()); // 문자열 길이

        String S = br.readLine(); // 원래 문구
        char[] arr = S.toCharArray();

        ArrayList<Integer> pList = new ArrayList<>();
        ArrayList<Integer> cList = new ArrayList<>();

        // P, C 위치 저장
        for (int i = 0; i < N; i++) {
            if (arr[i] == 'P') {
                pList.add(i);
            } else if (arr[i] == 'C') {
                cList.add(i);
            }
        }

        // 짝 맞추는 만큼 위치를 서로 바꿈
        int cnt = Math.min(pList.size(), cList.size());
        for (int i = 0; i < cnt; i++) {
            int pPos = pList.get(i);
            int cPos = cList.get(i);

            char temp = arr[pPos];
            arr[pPos] = arr[cPos];
            arr[cPos] = temp;
        }

        // 결과 출력
        System.out.println(new String(arr));
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글