문제
정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하시오. 예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각이다.
- 00시 00분 03초
- 00시 13분 30초
반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안 되는 시각이다.
- 00시 02분 55초
- 01시 27분 45초
입력
- 첫째 줄에 정수 N이 입력된다. (0<=N<=23)
출력
- 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 출력한다.
풀이 과정
해당 문제는 24(시간) * 60(분) * 60(초) = 86,400초 경우의 수를 가진다. 즉, 완전 탐색을 하더라도 100,000개도 되지 않기 떄문에 시간 제한 2초 이내에 해결할 수 있다.
그렇게 생각한 후 코드를 짰는데 입력이 5일 때 출력이 11475가 나와야 하는데 6이 나왔다. 그래서 다른 방식으로도 풀어보았는데 또 6이 나왔다 ㅎㅎ..
출력 방식이 의심스러워서 찾아보니 BufferedWriter의 write 메소드의 문제였다.ㅋㅋ
정수형을 BufferedWriter에 넣고 싶으면, String형으로의 변환이 필요하다 !
아직 java를 익히려면 한참 먼 것 같다..OTL
Java 코드
import java.util.*;
import java.io.*;
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());
int count = 0;
// 00시 00분 00초 ~ N시 59분 59초 까지 순회
for (int hour = 0; hour <= n; hour++) {
for (int minute = 0; minute < 60; minute++) {
for (int second = 0; second < 60; second++) {
if (hour % 10 == 3 || minute / 10 == 3 || minute % 10 == 3 || second / 10 == 3 || second % 10 == 3)
count++;
}
}
}
bw.write(String.valueOf(count));
br.close();
bw.close();
}
}
import java.util.*;
import java.io.*;
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());
int count = 0;
// 00시 00분 00초 ~ N시 59분 59초 까지 순회
for (int hour = 0; hour <= n; hour++) {
for (int minute = 0; minute < 60; minute++) {
for (int second = 0; second < 60; second++) {
String str = String.valueOf(hour) + String.valueOf(minute) + String.valueOf(second);
if (str.indexOf("3") != -1)
count++;
}
}
}
bw.write(String.valueOf(count));
br.close();
bw.close();
}
}
'Problem Solving > 이코테' 카테고리의 다른 글
[이코테] DFS/BFS - 음료수 얼려 먹기(Java) (0) | 2023.02.08 |
---|---|
[이코테] 구현 - 게임 개발(Java) (0) | 2023.02.07 |
[이코테] 구현 - 상하좌우(Java) (1) | 2023.02.02 |
[이코테] 그리디 - 볼링공 고르기(Java) (0) | 2023.01.26 |
[이코테] 그리디 - 만들 수 없는 금액(Java) (0) | 2023.01.26 |