
내가 생각했을때 문제에서 원하는부분
첫 번째 줄에 문자열의 길이인 정수 n이 주어진다. (1 ≤ n ≤ 1000)
두 번째 줄에 영어 알파벳 소문자로만 구성되고 길이가 n인 문자열 S가 주어진다.
문자열 S의 원소들을 적절히 재배열하여 만들 수 있는 'uospc'의 최대 개수를 출력한다.
내가 이 문제를 보고 생각해본 부분
입력 처리:
BufferedReader를 사용하여 입력 스트림에서 데이터를 효율적으로 읽어온다
첫 번째 줄에서 문자열의 길이 N을 읽어 정수로 변환한다.
두 번째 줄에서 실제 문자열 S를 읽어온다.
문자 카운트 초기화:
'u', 'o', 's', 'p', 'c' 각 문자의 출현 횟수를 저장하기 위해 countU, countO, countS, countP, countC 변수를 각각 0으로 초기화한다.
문자열 순회 및 카운트:
S.toCharArray()를 통해 문자열 S를 문자 배열로 변환하고, 향상된 for 루프를 사용하여 배열의 각 문자를 순회한다.
switch 문을 활용하여 현재 문자가 'u', 'o', 's', 'p', 'c' 중 어느 것인지 확인하고, 해당하는 카운트 변수를 1씩 증가시킨다.
이 방식은 if-else if보다 가독성이 좋고 특정 조건에서는 성능 이점도 있다.
최소 개수 찾기:
Math.min() 메서드를 여러 번 사용하여 다섯 가지 카운트 변수(countU, countO, countS, countP, countC) 중에서 가장 작은 값을 찾는다.
예를 들어, Math.min(countU, countO)로 'u'와 'o' 중 작은 값을 먼저 구하고, 그 결과와 countS를 비교하여 더 작은 값을 찾는 식으로 진행된다.
결과 출력:
최종적으로 구해진 minCount 값을 System.out.println()을 통해 출력한다.
이 값이 주어진 문자열로 만들 수 있는 'uospc'의 최대 개수이다.
자원 해제:
br.close()를 호출하여 BufferedReader와 연결된 시스템 자원을 해제한다.
코드로 구현
package baekjoon.baekjoon_31;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 30822번 문제
public class Main1212 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // 문자열의 길이 N을 읽습니다.
String S = br.readLine(); // 입력 문자열 S를 읽습니다.
// 'u', 'o', 's', 'p', 'c' 각 문자의 개수를 저장할 변수를 초기화합니다.
int countU = 0;
int countO = 0;
int countS = 0;
int countP = 0;
int countC = 0;
// 문자열 S를 순회하며 각 문자의 개수를 셉니다. (N을 활용)
for(int i = 0; i < N; i++) { // N을 사용하여 0부터 N-1까지 반복합니다.
char ch = S.charAt(i); // i번째 문자를 가져옵니다.
switch(ch) {
case 'u':
countU++;
break;
case 'o':
countO++;
break;
case 's':
countS++;
break;
case 'p':
countP++;
break;
case 'c':
countC++;
break;
}
}
// 다섯 가지 문자 중 가장 작은 개수를 찾습니다.
int minCount = Math.min(countU, countO);
minCount = Math.min(minCount, countS);
minCount = Math.min(minCount, countP);
minCount = Math.min(minCount, countC);
// 'uospc'의 최대 개수를 출력합니다.
System.out.println(minCount);
br.close(); // BufferedReader를 닫습니다.
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.