백준 UOSPC 세기

KIMYEONGJUN·2025년 11월 20일
post-thumbnail

문제

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

첫 번째 줄에 문자열의 길이인 정수 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를 닫습니다.
    }
}

마무리

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

profile
Junior backend developer

0개의 댓글