-
[백준/JAVA] 18312번 : 시각Algorithm 2024. 10. 26. 13:52
https://www.acmicpc.net/problem/18312
📌 문제 요약
정수 N과 K가 주어졌을 때, 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중 K가 하나라도 포함되는 모든 시각의 수를 세는 문제입니다. 시각은 디지털 시계 형식으로 초 단위로 구분합니다.
[ 오답 노트 ]
❌ 기존 오답 코드import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); // 5 String K = st.nextToken(); // 3 // 5시 59분 59초까지의 모든 시각 중 3이 하나라도 포함되는 모든 시각 세기 // [00, 00, 00] 형태로 // 00 01 02 03 04 05 06 07 08 09 10 // 11 12 13 14 15 16 17 18 19 20 int count = 0; for(int h = 0; h <= N; h++) { // 시 for(int m = 0; m <= 59; m++) { // 분 for(int s = 0; s <= 59; s++) { // 초 if(String.valueOf(s).contains(K) || String.valueOf(m).contains(K) || String.valueOf(h).contains(K)) { count++; } } } } System.out.println(count); } }
📌 기존 코드의 문제점1. 포맷의 일관성 문제:
- 기존 코드에서는 시, 분, 초를 개별적으로 String.valueOf()로 변환해 contains(K)로 확인했습니다.
- 이 방식은 대부분 올바르게 동작하지만, 특정 케이스에서 시, 분, 초가 따로 분리되어 체크되기 때문에 디지털 시계 형식(HHMMSS)과 일관성이 맞지 않아 오작동할 가능성이 있습니다.
[ 정답 코드 & 올바른 풀이 ]
📌 올바른 풀이1. 포맷의 일관성 문제 해결
- 문제 요구사항은 HHMMSS 형식의 디지털 시계 전체에서 K가 포함되는지를 확인하는 것입니다. String.format("%02d%02d%02d", hour, minute, second)을 사용해 시, 분, 초를 HHMMSS 형식으로 통일한 후 indexOf로 K를 검색했습니다.
- 이를 통해 하나의 통합된 문자열에서 한 번에 K를 탐색하며 일관성을 유지할 수 있었습니다.
📌 정답 코드import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); // 5 String K = st.nextToken(); // 3 // 5시 59분 59초까지의 모든 시각 중 3이 하나라도 포함되는 모든 시각 세기 // [00, 00, 00] 형태로 // 00 01 02 03 04 05 06 07 08 09 10 // 11 12 13 14 15 16 17 18 19 20 int count = 0; for(int h = 0; h <= N; h++) { // 시 for(int m = 0; m <= 59; m++) { // 분 for(int s = 0; s <= 59; s++) { // 초 // 현재 시각을 HHMMSS 형식으로 포맷 String time = String.format("%02d%02d%02d", h, m, s); if(time.contains(K)) { count++; } } } } System.out.println(count); } }
'Algorithm' 카테고리의 다른 글
[백준/JAVA] 2231번 : 분해합 (0) 2024.10.28 [백준/JAVA] 22864번 : 피로도 (0) 2024.10.26 [백준/JAVA] 11286번 : 절댓값 힙 (0) 2024.10.26 [백준/JAVA] 2075번 : N번째 큰 수 (0) 2024.10.22 [백준/JAVA] 4358번 : 생태학 (0) 2024.10.22