• 문제 링크
17615번: 볼 모으기
첫 번째 줄에는 볼의 총 개수 N이 주어진다. (1 ≤ N ≤ 500,000) 다음 줄에는 볼의 색깔을 나타내는 문자 R(빨간색 볼) 또는 B(파란색 볼)가 공백 없이 주어진다. 문자열에는 R 또는 B 중 한 종류만 주
www.acmicpc.net
• 풀이 과정
입력에서 R, B 의 개수를 세어 둘 중 작은 값을 구해 최소값을 초기화한다.
가장 왼쪽과 오른쪽의 연속된 색의 개수를 각각 해당 색의 전체 개수에서 뺀 값을 구한다.
이를 최소값과 비교하여 갱신해 최소 이동 횟수를 도출한다.
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
String input = br.readLine();
int red = 0, blue = 0;
for (int i = 0; i < n; i++) {
if (input.charAt(i) == 'R')
red++;
else
blue++;
}
int min = Math.min(red, blue);
char first = input.charAt(0);
char last = input.charAt(n - 1);
int cnt = 1;
while (cnt < n && input.charAt(cnt) == first)
cnt++;
min = first == 'R' ? Math.min(min, red - cnt) : Math.min(min, blue - cnt);
cnt = 1;
while (cnt < n && input.charAt(n - 1 - cnt) == last)
cnt++;
min = last == 'R' ? Math.min(min, red - cnt) : Math.min(min, blue - cnt);
bw.write(String.valueOf(min));
bw.flush();
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 18243 Small World Network - Graph Theory / Java (0) | 2023.04.19 |
---|---|
[백준] 21938 영상처리 - Graph Theory / Java (0) | 2023.04.17 |
[백준] 1263 시간 관리 - Greedy / Java (0) | 2023.04.15 |
[백준] 12933 오리 - Greedy / Java (0) | 2023.04.14 |
[백준] 20186 수 고르기 - Greedy / Java (0) | 2023.04.13 |
댓글