
내가 생각했을때 문제에서 원하는부분
첫 번째 줄에 원래 문구를 나타내는 문자열 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();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.