-
[백준/JAVA] 13305번: 블로그2Algorithm 2024. 7. 17. 17:14
https://www.acmicpc.net/problem/20365
- 정답 코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); // 문자 수 String colors = br.readLine(); // BBRBRBBR // 각 색 카운트 int blue= 0; int red = 0; // 초기 색깔 설정 char currentColor = colors.charAt(0); // B // 초기 색깔 기반으로 블록 수 증가 if(currentColor == 'B') { blue++; // 1 }else { red++; } // 색이 변경되는 지점 찾기 for(int i = 1; i < N; i++) { if(colors.charAt(i) != currentColor) { // 색이 변경되는 지점 currentColor = colors.charAt(i); if(currentColor == 'B') { blue++; }else{ red++; } } } // 작은값 기준으로 최소 작업 횟수 계산 int min = Math.min(blue, red) + 1; System.out.println(min); } }
- 문제 풀이
1. 초기 블록 설정
if(currentColor == 'B') { blue++; // 1 }else { red++; }
- 첫 번째 문제가 파란색이므로 blue를 1 증가시킵니다.
- 현재 blue는 1, red는 0입니다.
2. 색이 변경되는 지점 찾기
// 색이 변경되는 지점 찾기 for(int i = 1; i < N; i++) { if(colors.charAt(i) != currentColor) { // 색이 변경되는 지점 currentColor = colors.charAt(i); if(currentColor == 'B') { blue++; }else{ red++; } } }
- i = 1, colors.charAt(1) = 'B': 현재 색과 동일하므로 넘어갑니다.
- i = 2, colors.charAt(2) = 'R': 색이 변경됨. currentColor = 'R', red++ → red = 1.
- i = 3, colors.charAt(3) = 'B': 색이 변경됨. currentColor = 'B', blue++ → blue = 2.
- i = 4, colors.charAt(4) = 'R': 색이 변경됨. currentColor = 'R', red++ → red = 2.
- i = 5, colors.charAt(5) = 'B': 색이 변경됨. currentColor = 'B', blue++ → blue = 3.
- i = 6, colors.charAt(6) = 'B': 현재 색과 동일하므로 넘어갑니다.
- i = 7, colors.charAt(7) = 'R': 색이 변경됨. currentColor = 'R', red++ → red = 3.
3. 최소 작업 횟수 계산
// 작은값 기준으로 최소 작업 횟수 계산 int min = Math.min(blue, red) + 1; System.out.println(min);
- blue는 3, red도 3입니다.
- Math.min(3, 3) + 1 = 4.
- 따라서 최소 작업 횟수는 4입니다.
- 최소 작업 횟수는 이 값에 1을 더한 것입니다. 이유는 어느 한 색의 블록 전체를 먼저 칠하고, 그 사이의 다른 색의 블록을 한 번씩 칠하는 것이기 때문입니다.
'Algorithm' 카테고리의 다른 글
[백준/JAVA] 1541번: 잃어버린 괄호 (0) 2024.07.18 [백준/JAVA] 16953번: A → B (0) 2024.07.18 [백준/JAVA] 13305번: 주유소 (0) 2024.07.17 [백준/JAVA] 20300번: 서강근육맨 (0) 2024.07.17 [백준/JAVA] 11399번: ATM (0) 2024.07.17